From 03d40fd92c2125a8aeb05517a7c5158ec27c2324 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 1 Nov 2023 12:05:40 +0100 Subject: [PATCH 01/46] Update pallet-dip-provider to allow generic hooks --- Cargo.lock | 1 - pallets/pallet-dip-provider/Cargo.toml | 1 - pallets/pallet-dip-provider/src/lib.rs | 98 +++++++++++++---------- pallets/pallet-dip-provider/src/traits.rs | 57 ++++++++++++- 4 files changed, 111 insertions(+), 46 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8915054d6e..a5aef17c56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6491,7 +6491,6 @@ dependencies = [ "frame-system", "parity-scale-codec", "scale-info", - "sp-io", "sp-std", ] diff --git a/pallets/pallet-dip-provider/Cargo.toml b/pallets/pallet-dip-provider/Cargo.toml index 8c078fbc52..5e22e357a1 100644 --- a/pallets/pallet-dip-provider/Cargo.toml +++ b/pallets/pallet-dip-provider/Cargo.toml @@ -19,7 +19,6 @@ frame-support.workspace = true frame-system.workspace = true parity-scale-codec = {workspace = true, features = ["derive"]} scale-info = {workspace = true, features = ["derive"]} -sp-io.workspace = true sp-std.workspace = true [features] diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 826fd170ac..113367b4b7 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -31,23 +31,17 @@ pub mod pallet { use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; use parity_scale_codec::FullCodec; - use sp_io::MultiRemovalResults; use sp_std::fmt::Debug; - use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, SubmitterInfo}; + use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; pub type IdentityOf = <::IdentityProvider as IdentityProvider<::Identifier>>::Success; pub type IdentityCommitmentVersion = u16; pub const LATEST_COMMITMENT_VERSION: IdentityCommitmentVersion = 0; + pub const MAX_COMMITMENTS_PER_IDENTITY: u16 = LATEST_COMMITMENT_VERSION + 1; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); - #[derive(Encode, Decode, RuntimeDebug, TypeInfo, Clone, PartialEq)] - pub enum VersionOrLimit { - Version(IdentityCommitmentVersion), - Limit(u32), - } - #[pallet::config] pub trait Config: frame_system::Config { type CommitOriginCheck: EnsureOrigin; @@ -63,6 +57,11 @@ pub mod pallet { type IdentityCommitmentGeneratorError: Into; type IdentityProvider: IdentityProvider; type IdentityProviderError: Into; + type ProviderHooks: ProviderHooks< + Identifier = Self::Identifier, + Submitter = Self::AccountId, + IdentityCommitment = Self::IdentityCommitment, + >; type RuntimeEvent: From> + IsType<::RuntimeEvent>; } @@ -104,6 +103,7 @@ pub mod pallet { LimitTooLow, IdentityProvider(u16), IdentityCommitmentGenerator(u16), + HookError(u16), } #[pallet::call] @@ -116,27 +116,43 @@ pub mod pallet { identifier: T::Identifier, version: Option, ) -> DispatchResult { - // TODO: use dispatcher to get deposit - let _dispatcher = + let dispatcher = T::CommitOriginCheck::ensure_origin(origin).map(|e: ::CommitOrigin| e.submitter())?; let commitment_version = version.unwrap_or(LATEST_COMMITMENT_VERSION); let commitment = match T::IdentityProvider::retrieve(&identifier) { + Ok(None) => Err(Error::::IdentityNotFound), + Err(error) => Err(Error::::IdentityProvider(error.into())), Ok(Some(identity)) => { T::IdentityCommitmentGenerator::generate_commitment(&identifier, &identity, commitment_version) .map_err(|error| Error::::IdentityCommitmentGenerator(error.into())) } - Ok(None) => Err(Error::::IdentityNotFound), - Err(error) => Err(Error::::IdentityProvider(error.into())), }?; - // TODO: Take deposit (once 0.9.42 PR is merged into develop) - IdentityCommitments::::insert(&identifier, commitment_version, commitment.clone()); - Self::deposit_event(Event::::IdentityCommitted { - identifier, - commitment, - version: commitment_version, - }); + IdentityCommitments::::try_mutate(&identifier, commitment_version, |commitment_entry| { + if let Some(old_commitment) = commitment_entry { + T::ProviderHooks::on_commitment_removed( + &identifier, + &dispatcher, + old_commitment, + commitment_version, + ) + .map_err(|e| Error::::HookError(e.into()))?; + Self::deposit_event(Event::::VersionedIdentityDeleted { + identifier: identifier.clone(), + version: commitment_version, + }); + } + T::ProviderHooks::on_identity_committed(&identifier, &dispatcher, &commitment, commitment_version) + .map_err(|e| Error::::HookError(e.into()))?; + *commitment_entry = Some(commitment.clone()); + Self::deposit_event(Event::::IdentityCommitted { + identifier: identifier.clone(), + commitment, + version: commitment_version, + }); + Ok::<_, Error>(()) + })?; Ok(()) } @@ -146,34 +162,32 @@ pub mod pallet { pub fn delete_identity_commitment( origin: OriginFor, identifier: T::Identifier, - version_or_limit: VersionOrLimit, + version: Option, ) -> DispatchResult { - let _dispatcher = + let dispatcher = T::CommitOriginCheck::ensure_origin(origin).map(|e: ::CommitOrigin| e.submitter())?; - match version_or_limit { - VersionOrLimit::Version(version) => { - let commitment = IdentityCommitments::::take(&identifier, version); - match commitment { - Some(_) => Err(Error::::IdentityNotFound), - None => { - Self::deposit_event(Event::::VersionedIdentityDeleted { identifier, version }); - Ok(()) - } - } - } - VersionOrLimit::Limit(limit) => { - let MultiRemovalResults { maybe_cursor, .. } = - IdentityCommitments::::clear_prefix(&identifier, limit, None); - match maybe_cursor { - Some(_) => Err(Error::::LimitTooLow), - None => { - Self::deposit_event(Event::::IdentityDeleted { identifier }); - Ok(()) - } + let commitment_version = version.unwrap_or(LATEST_COMMITMENT_VERSION); + IdentityCommitments::::try_mutate(&identifier, commitment_version, |commitment_entry| { + match commitment_entry { + None => Err(Error::::IdentityNotFound), + Some(commitment) => { + T::ProviderHooks::on_commitment_removed( + &identifier, + &dispatcher, + commitment, + commitment_version, + ) + .map_err(|e| Error::::HookError(e.into()))?; + *commitment_entry = None; + Self::deposit_event(Event::::VersionedIdentityDeleted { + identifier: identifier.clone(), + version: commitment_version, + }); + Ok(()) } } - }?; + })?; Ok(()) } } diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 76b742e129..3b13a96b0f 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -16,13 +16,16 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org +use core::marker::PhantomData; + +use crate::IdentityCommitmentVersion; use did::DidRawOrigin; pub use identity_generation::*; pub mod identity_generation { - use sp_std::marker::PhantomData; + use super::*; - use crate::IdentityCommitmentVersion; + use sp_std::marker::PhantomData; pub trait IdentityCommitmentGenerator { type Error; @@ -120,3 +123,53 @@ where self.submitter.clone() } } + +pub trait ProviderHooks { + type Identifier; + type IdentityCommitment; + type Error: Into; + type Submitter; + type Success; + + fn on_identity_committed( + identifier: &Self::Identifier, + submitter: &Self::Submitter, + commitment: &Self::IdentityCommitment, + version: IdentityCommitmentVersion, + ) -> Result; + + fn on_commitment_removed( + identifier: &Self::Identifier, + submitter: &Self::Submitter, + commitment: &Self::IdentityCommitment, + version: IdentityCommitmentVersion, + ) -> Result; +} + +pub struct NoopHooks(PhantomData<(Identifier, Commitment, Submitter)>); + +impl ProviderHooks for NoopHooks { + type Error = u16; + type Identifier = Identifier; + type IdentityCommitment = Commitment; + type Submitter = Submitter; + type Success = (); + + fn on_commitment_removed( + _identifier: &Self::Identifier, + _submitter: &Self::Submitter, + _commitment: &Self::IdentityCommitment, + _version: IdentityCommitmentVersion, + ) -> Result { + Ok(()) + } + + fn on_identity_committed( + _identifier: &Self::Identifier, + _submitter: &Self::Submitter, + _commitment: &Self::IdentityCommitment, + _version: IdentityCommitmentVersion, + ) -> Result { + Ok(()) + } +} From ba54dab85061437192d2a234fb6d3e5c22a01a03 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 1 Nov 2023 13:19:07 +0100 Subject: [PATCH 02/46] WIP implementation for commitment storage deposit manager --- Cargo.lock | 2 + dip-template/runtimes/dip-provider/Cargo.toml | 5 + dip-template/runtimes/dip-provider/src/dip.rs | 163 ++++++++++++++++-- dip-template/runtimes/dip-provider/src/lib.rs | 10 +- pallets/pallet-dip-provider/src/lib.rs | 5 + 5 files changed, 167 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5aef17c56..f88d824ee3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2535,6 +2535,8 @@ dependencies = [ "frame-system-rpc-runtime-api", "kilt-dip-support", "kilt-runtime-api-dip-provider", + "kilt-support", + "log", "pallet-aura", "pallet-authorship", "pallet-balances", diff --git a/dip-template/runtimes/dip-provider/Cargo.toml b/dip-template/runtimes/dip-provider/Cargo.toml index dff25abda3..efe2ff6f4e 100644 --- a/dip-template/runtimes/dip-provider/Cargo.toml +++ b/dip-template/runtimes/dip-provider/Cargo.toml @@ -14,11 +14,13 @@ version.workspace = true substrate-wasm-builder.workspace = true [dependencies] +log.woskpace = true parity-scale-codec = {workspace = true, features = ["derive"]} scale-info = {workspace = true, features = ["derive"]} # DIP did.workspace = true +kilt-support.workspace = true kilt-dip-support.workspace = true kilt-runtime-api-dip-provider.workspace = true pallet-did-lookup.workspace = true @@ -66,9 +68,11 @@ default = [ "std", ] std = [ + "log/std", "parity-scale-codec/std", "scale-info/std", "did/std", + "kilt-support/std", "kilt-dip-support/std", "kilt-runtime-api-dip-provider/std", "pallet-did-lookup/std", @@ -109,6 +113,7 @@ std = [ ] runtime-benchmarks = [ "did/runtime-benchmarks", + "kilt-support/runtime-benchmarks", "kilt-dip-support/runtime-benchmarks", "pallet-did-lookup/runtime-benchmarks", "pallet-dip-provider/runtime-benchmarks", diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 720304f30b..9a1d8b86ad 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -18,7 +18,10 @@ use did::{DidRawOrigin, EnsureDidOrigin, KeyIdOf}; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_provider::{traits::IdentityProvider, IdentityCommitmentVersion}; +use pallet_dip_provider::{ + traits::{IdentityProvider, NoopHooks}, + IdentityCommitmentVersion, +}; use parity_scale_codec::{Decode, Encode}; use runtime_common::dip::{ did::LinkedDidInfoProviderOf, @@ -29,20 +32,152 @@ use sp_std::vec::Vec; use crate::{AccountId, DidIdentifier, Hash, Runtime, RuntimeEvent}; -#[derive(Encode, Decode, TypeInfo)] -pub struct RuntimeApiDipProofRequest { - pub(crate) identifier: DidIdentifier, - pub(crate) version: IdentityCommitmentVersion, - pub(crate) keys: Vec>, - pub(crate) accounts: Vec, - pub(crate) should_include_web3_name: bool, +pub mod runtime_api { + use super::*; + + #[derive(Encode, Decode, TypeInfo)] + pub struct DipProofRequest { + pub(crate) identifier: DidIdentifier, + pub(crate) version: IdentityCommitmentVersion, + pub(crate) keys: Vec>, + pub(crate) accounts: Vec, + pub(crate) should_include_web3_name: bool, + } + + #[derive(Encode, Decode, TypeInfo)] + pub enum DipProofError { + IdentityNotFound, + IdentityProviderError( as IdentityProvider>::Error), + MerkleProofError(DidMerkleProofError), + } } -#[derive(Encode, Decode, TypeInfo)] -pub enum RuntimeApiDipProofError { - IdentityNotFound, - IdentityProviderError( as IdentityProvider>::Error), - MerkleProofError(DidMerkleProofError), +pub mod deposit { + use super::*; + use crate::{Balance, Balances, RuntimeHoldReason}; + + use frame_support::traits::{fungible::Inspect, tokens::fungible::MutateHold}; + + use kilt_support::{traits::StorageDepositCollector, Deposit}; + use pallet_dip_provider::{traits::ProviderHooks, HoldReason}; + use sp_runtime::DispatchError; + + pub enum CommitmentDepositCollectorError { + Internal, + } + + impl From for u16 { + fn from(value: CommitmentDepositCollectorError) -> Self { + match value { + CommitmentDepositCollectorError::Internal => u16::MAX, + } + } + } + + impl From for DispatchError { + fn from(value: CommitmentDepositCollectorError) -> Self { + match value { + CommitmentDepositCollectorError::Internal => { + DispatchError::Other("CommitmentDepositCollectorError::Internal") + } + } + } + } + + pub const DEPOSIT: Balance = 100_000; + + // TODO: Store deposits somewhere, so that they can be freed up if the deposit + // amount changes. + pub struct CommitmentDepositCollector; + + impl StorageDepositCollector + for CommitmentDepositCollector + { + type Currency = Balances; + type Reason = HoldReason; + + fn reason() -> Self::Reason { + Self::Reason::Deposit + } + + fn deposit( + key: &(AccountId, IdentityCommitmentVersion), + ) -> Result>::Balance>, DispatchError> { + log::error!("CommitmentDepositCollector::deposit(key) called, when it should not have, since it returns a dummy value."); + Err(CommitmentDepositCollectorError::Internal.into()) + } + + fn deposit_amount( + key: &(AccountId, IdentityCommitmentVersion), + ) -> >::Balance { + DEPOSIT + } + + fn get_hashed_key(key: &(AccountId, IdentityCommitmentVersion)) -> Result, DispatchError> { + log::error!("CommitmentDepositCollector::get_hashed_key(key) called, when it should not have, since it returns a dummy value."); + Err(CommitmentDepositCollectorError::Internal.into()) + } + + fn store_deposit( + key: &(AccountId, IdentityCommitmentVersion), + deposit: Deposit>::Balance>, + ) -> Result<(), DispatchError> { + log::error!("CommitmentDepositCollector::get_hashed_key(key) called, when it should not have, since it returns a dummy value."); + Err(CommitmentDepositCollectorError::Internal.into()) + } + } + + impl ProviderHooks for CommitmentDepositCollector { + type Error = CommitmentDepositCollectorError; + type Identifier = DidIdentifier; + type IdentityCommitment = Hash; + type Submitter = AccountId; + type Success = (); + + fn on_identity_committed( + identifier: &Self::Identifier, + submitter: &Self::Submitter, + commitment: &Self::IdentityCommitment, + version: IdentityCommitmentVersion, + ) -> Result { + let _deposit = Self::create_deposit(submitter, DEPOSIT); + // TODO: Store deposit somewhere + Ok(()) + } + + fn on_commitment_removed( + identifier: &Self::Identifier, + submitter: &Self::Submitter, + commitment: &Self::IdentityCommitment, + version: IdentityCommitmentVersion, + ) -> Result { + let deposit = Self::deposit((submitter, version))?; + Self::free_deposit(deposit) + } + } + + // impl ProviderHooks + // for CommitmentDepositCollector + // where + // Currency: MutateHold, + // HoldReason: Default, + // { + // type Error = CommitmentDepositCollector; + // type Identifier = DidIdentifier; + // type IdentityCommitment = Hash; + // type Submitter = AccountId; + // type Success = (); + + // fn on_identity_committed( + // identifier: &Self::Identifier, + // submitter: &Self::Submitter, + // commitment: &Self::IdentityCommitment, + // version: IdentityCommitmentVersion, + // ) -> Result { + // let reason = HoldReason::default(); + // reserve_deposit + // } + // } } impl pallet_dip_provider::Config for Runtime { @@ -54,5 +189,7 @@ impl pallet_dip_provider::Config for Runtime { type IdentityCommitmentGeneratorError = DidMerkleProofError; type IdentityProvider = LinkedDidInfoProviderOf; type IdentityProviderError = as IdentityProvider>::Error; + // TODO: Change to deposit collector + type ProviderHooks = NoopHooks; type RuntimeEvent = RuntimeEvent; } diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index cc8320d55e..d576deaf98 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -568,14 +568,14 @@ impl_runtime_apis! { } } - impl kilt_runtime_api_dip_provider::DipProvider>, RuntimeApiDipProofError> for Runtime { - fn generate_proof(request: RuntimeApiDipProofRequest) -> Result>, RuntimeApiDipProofError> { + impl kilt_runtime_api_dip_provider::DipProvider>, runtime_api::DipProofError> for Runtime { + fn generate_proof(request: runtime_api::DipProofRequest) -> Result>, runtime_api::DipProofError> { let linked_did_info = match ::IdentityProvider::retrieve(&request.identifier) { Ok(Some(linked_did_info)) => Ok(linked_did_info), - Ok(None) => Err(RuntimeApiDipProofError::IdentityNotFound), - Err(e) => Err(RuntimeApiDipProofError::IdentityProviderError(e)) + Ok(None) => Err(runtime_api::DipProofError::IdentityNotFound), + Err(e) => Err(runtime_api::DipProofError::IdentityProviderError(e)) }?; - DidMerkleRootGenerator::::generate_proof(&linked_did_info, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(RuntimeApiDipProofError::MerkleProofError) + DidMerkleRootGenerator::::generate_proof(&linked_did_info, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProofError) } } } diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 113367b4b7..767e555760 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -42,6 +42,11 @@ pub mod pallet { pub const MAX_COMMITMENTS_PER_IDENTITY: u16 = LATEST_COMMITMENT_VERSION + 1; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); + #[pallet::composite_enum] + pub enum HoldReason { + Deposit, + } + #[pallet::config] pub trait Config: frame_system::Config { type CommitOriginCheck: EnsureOrigin; From 80c909eeeed1927dd4f0095fd5ed8aaf8a562066 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 1 Nov 2023 14:59:19 +0100 Subject: [PATCH 03/46] Minor tweaks --- dip-template/runtimes/dip-provider/src/dip.rs | 30 +++---------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 9a1d8b86ad..9cb45a40d2 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -86,8 +86,8 @@ pub mod deposit { pub const DEPOSIT: Balance = 100_000; - // TODO: Store deposits somewhere, so that they can be freed up if the deposit - // amount changes. + // TODO: Store deposits somewhere, so that they can be freed up even after the + // deposit amount changes. pub struct CommitmentDepositCollector; impl StorageDepositCollector @@ -141,7 +141,8 @@ pub mod deposit { version: IdentityCommitmentVersion, ) -> Result { let _deposit = Self::create_deposit(submitter, DEPOSIT); - // TODO: Store deposit somewhere + // TODO: Store deposit somewhere, perhaps inside the provider pallet, via some + // metadata tricks? Ok(()) } @@ -155,29 +156,6 @@ pub mod deposit { Self::free_deposit(deposit) } } - - // impl ProviderHooks - // for CommitmentDepositCollector - // where - // Currency: MutateHold, - // HoldReason: Default, - // { - // type Error = CommitmentDepositCollector; - // type Identifier = DidIdentifier; - // type IdentityCommitment = Hash; - // type Submitter = AccountId; - // type Success = (); - - // fn on_identity_committed( - // identifier: &Self::Identifier, - // submitter: &Self::Submitter, - // commitment: &Self::IdentityCommitment, - // version: IdentityCommitmentVersion, - // ) -> Result { - // let reason = HoldReason::default(); - // reserve_deposit - // } - // } } impl pallet_dip_provider::Config for Runtime { From bde05bfe13c0f6dcafa8c021e477bd4502d49e88 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 12:37:53 +0100 Subject: [PATCH 04/46] New pallet-deposit-storage compiling --- Cargo.lock | 14 ++ Cargo.toml | 1 + dip-template/runtimes/dip-provider/Cargo.toml | 2 +- dip-template/runtimes/dip-provider/src/dip.rs | 3 + pallets/pallet-deposit-storage/Cargo.toml | 38 +++++ pallets/pallet-deposit-storage/src/deposit.rs | 136 ++++++++++++++++++ pallets/pallet-deposit-storage/src/lib.rs | 71 +++++++++ 7 files changed, 264 insertions(+), 1 deletion(-) create mode 100644 pallets/pallet-deposit-storage/Cargo.toml create mode 100644 pallets/pallet-deposit-storage/src/deposit.rs create mode 100644 pallets/pallet-deposit-storage/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index f88d824ee3..fad1bce006 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6444,6 +6444,20 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-deposit-storage" +version = "1.12.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "kilt-support", + "pallet-dip-provider", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-did-lookup" version = "1.12.0-dev" diff --git a/Cargo.toml b/Cargo.toml index 00b1e3e7c8..afd7e6a757 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,6 +55,7 @@ ctype = {path = "pallets/ctype", default-features = false} delegation = {path = "pallets/delegation", default-features = false} did = {path = "pallets/did", default-features = false} pallet-configuration = {path = "pallets/pallet-configuration", default-features = false} +pallet-deposit-storage = {path = "pallets/pallet-deposit-storage", default-features = false} pallet-dip-consumer = {path = "pallets/pallet-dip-consumer", default-features = false} pallet-dip-provider = {path = "pallets/pallet-dip-provider", default-features = false} pallet-did-lookup = {path = "pallets/pallet-did-lookup", default-features = false} diff --git a/dip-template/runtimes/dip-provider/Cargo.toml b/dip-template/runtimes/dip-provider/Cargo.toml index efe2ff6f4e..166f4d29e8 100644 --- a/dip-template/runtimes/dip-provider/Cargo.toml +++ b/dip-template/runtimes/dip-provider/Cargo.toml @@ -14,7 +14,7 @@ version.workspace = true substrate-wasm-builder.workspace = true [dependencies] -log.woskpace = true +log.workspace = true parity-scale-codec = {workspace = true, features = ["derive"]} scale-info = {workspace = true, features = ["derive"]} diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 9cb45a40d2..224a65ebbb 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -88,6 +88,9 @@ pub mod deposit { // TODO: Store deposits somewhere, so that they can be freed up even after the // deposit amount changes. + // TODO: Define a new pallet storing all the deposits, and bind this to that + // pallet, so that this cannot be used without the runtime deploying that pallet + // as well. Move this inside that pallet altogether. pub struct CommitmentDepositCollector; impl StorageDepositCollector diff --git a/pallets/pallet-deposit-storage/Cargo.toml b/pallets/pallet-deposit-storage/Cargo.toml new file mode 100644 index 0000000000..f0f012d72f --- /dev/null +++ b/pallets/pallet-deposit-storage/Cargo.toml @@ -0,0 +1,38 @@ +[package] +authors.workspace = true +documentation.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +readme.workspace = true +repository.workspace = true +version.workspace = true +name = "pallet-deposit-storage" +description = "Stores all deposits under a single pallet, with suport for namespacing different deposit contexts." + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +# Substrate dependencies +frame-support.workspace = true +frame-system.workspace = true +kilt-support.workspace = true +pallet-dip-provider.workspace = true +parity-scale-codec = {workspace = true, features = ["derive"]} +scale-info = {workspace = true, features = ["derive"]} +sp-runtime.workspace = true +sp-std.workspace = true + +[features] +default = ["std"] +std = [ + "frame-support/std", + "frame-system/std", + "kilt-support/std", + "pallet-dip-provider/std", + "parity-scale-codec/std", + "scale-info/std", + "sp-runtime/std", + "sp-std/std", +] diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs new file mode 100644 index 0000000000..06d9cc518b --- /dev/null +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -0,0 +1,136 @@ +// KILT Blockchain – https://botlabs.org +// Copyright (C) 2019-2023 BOTLabs GmbH + +// The KILT Blockchain is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// The KILT Blockchain is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// If you feel like getting in touch with us, you can do so at info@botlabs.org + +use frame_support::{ + sp_runtime::DispatchError, + traits::{ + fungible::{Inspect, MutateHold}, + ConstU32, + }, + BoundedVec, +}; +use kilt_support::{traits::StorageDepositCollector, Deposit}; +use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; +use parity_scale_codec::Encode; +use sp_runtime::traits::{Get, Hash}; +use sp_std::marker::PhantomData; + +use crate::{AccountIdOf, BalanceOf, Config, Deposits, Error, HoldReason, MAX_NAMESPACE_LENGTH}; + +type HasherOf = ::Hashing; + +pub struct StorageDepositCollectorViaDepositsPallet( + PhantomData<(Runtime, Namespace, DepositAmount, Key, RuntimeHoldReason)>, +); + +impl + StorageDepositCollector, Key, RuntimeHoldReason> + for StorageDepositCollectorViaDepositsPallet +where + Runtime: Config, + Runtime::Currency: MutateHold, Reason = RuntimeHoldReason>, + Namespace: Get>>, + DepositAmount: Get>, + Key: Encode, + RuntimeHoldReason: From, +{ + type Currency = Runtime::Currency; + type Reason = HoldReason; + + fn reason() -> Self::Reason { + HoldReason::Deposit + } + + fn deposit( + key: &Key, + ) -> Result, >>::Balance>, DispatchError> + { + let namespace = Namespace::get(); + let key_hash = HasherOf::::hash(key.encode().as_ref()); + let deposit = Deposits::::get(namespace, key_hash) + .ok_or(DispatchError::from(Error::::DepositNotFound))?; + Ok(deposit) + } + + fn deposit_amount(_key: &Key) -> >>::Balance { + DepositAmount::get() + } + + fn get_hashed_key(key: &Key) -> Result, DispatchError> { + let namespace = Namespace::get(); + let key_hash = HasherOf::::hash(key.encode().as_ref()); + Ok(Deposits::::hashed_key_for(namespace, key_hash)) + } + + fn store_deposit( + key: &Key, + deposit: Deposit, >>::Balance>, + ) -> Result<(), DispatchError> { + let namespace = Namespace::get(); + let key_hash = HasherOf::::hash(key.encode().as_ref()); + Deposits::::try_mutate(namespace, key_hash, |deposit_entry| match deposit_entry { + Some(_) => Err(Error::::DepositExisting), + None => { + *deposit_entry = Some(deposit); + Ok(()) + } + }) + .map_err(DispatchError::from)?; + Ok(()) + } +} + +type DepositKey = (AccountIdOf, IdentityCommitmentVersion); + +impl ProviderHooks + for StorageDepositCollectorViaDepositsPallet, RuntimeHoldReason> +where + Runtime: pallet_dip_provider::Config + Config, + Runtime::Currency: MutateHold, Reason = RuntimeHoldReason>, + Namespace: Get>>, + DepositAmount: Get>, + RuntimeHoldReason: From, +{ + type Error = u16; + type Identifier = Runtime::Identifier; + type IdentityCommitment = Runtime::IdentityCommitment; + type Submitter = AccountIdOf; + type Success = (); + + fn on_identity_committed( + _identifier: &Self::Identifier, + submitter: &Self::Submitter, + _commitment: &Self::IdentityCommitment, + version: IdentityCommitmentVersion, + ) -> Result { + let deposit = Self::create_deposit(submitter.clone(), DepositAmount::get()).map_err(|_| 1u16)?; + Self::store_deposit(&(submitter.clone(), version), deposit).map_err(|_| 2u16)?; + Ok(()) + } + + fn on_commitment_removed( + _identifier: &Self::Identifier, + submitter: &Self::Submitter, + _commitment: &Self::IdentityCommitment, + version: pallet_dip_provider::IdentityCommitmentVersion, + ) -> Result { + let deposit = Self::deposit(&(submitter.clone(), version)).map_err(|_| 3u16)?; + Self::free_deposit(deposit).map_err(|_| 4u16)?; + Ok(()) + } +} diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs new file mode 100644 index 0000000000..4ee9a1cc66 --- /dev/null +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -0,0 +1,71 @@ +// KILT Blockchain – https://botlabs.org +// Copyright (C) 2019-2023 BOTLabs GmbH + +// The KILT Blockchain is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// The KILT Blockchain is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// If you feel like getting in touch with us, you can do so at info@botlabs.org + +mod deposit; + +pub use deposit::StorageDepositCollectorViaDepositsPallet; +pub use pallet::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + use frame_support::{ + pallet_prelude::*, + traits::{fungible::Inspect, ConstU32}, + }; + use kilt_support::Deposit; + + /// The current storage version. + const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); + pub const MAX_NAMESPACE_LENGTH: u32 = 16; + + pub type AccountIdOf = ::AccountId; + pub type BalanceOf = <::Currency as Inspect>>::Balance; + + #[pallet::config] + pub trait Config: frame_system::Config { + type Currency: Inspect; + } + + #[pallet::composite_enum] + pub enum HoldReason { + Deposit, + } + + #[pallet::error] + pub enum Error { + DepositNotFound, + DepositExisting, + } + + // Double map (namespace, key) -> deposit + #[pallet::storage] + pub type Deposits = StorageDoubleMap< + _, + Twox64Concat, + BoundedVec>, + Twox64Concat, + ::Hash, + Deposit<::AccountId, BalanceOf>, + >; + + #[pallet::pallet] + #[pallet::storage_version(STORAGE_VERSION)] + pub struct Pallet(_); +} From 8d9a2bc295eb5bd466adf9b64f2fdeda40b716b7 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 13:12:38 +0100 Subject: [PATCH 05/46] Provider runtime compiling --- Cargo.lock | 1 + crates/kilt-dip-support/Cargo.toml | 5 +- dip-template/runtimes/dip-provider/Cargo.toml | 3 +- dip-template/runtimes/dip-provider/src/dip.rs | 128 +- dip-template/runtimes/dip-provider/src/lib.rs | 3 +- out.txt | 1916 ++++++++++++++++- pallets/pallet-deposit-storage/src/deposit.rs | 2 +- pallets/pallet-deposit-storage/src/lib.rs | 3 + 8 files changed, 1951 insertions(+), 110 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fad1bce006..4c6d6c465e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2541,6 +2541,7 @@ dependencies = [ "pallet-authorship", "pallet-balances", "pallet-collator-selection", + "pallet-deposit-storage", "pallet-did-lookup", "pallet-dip-provider", "pallet-session", diff --git a/crates/kilt-dip-support/Cargo.toml b/crates/kilt-dip-support/Cargo.toml index 8941e0e46d..b9ba5ff712 100644 --- a/crates/kilt-dip-support/Cargo.toml +++ b/crates/kilt-dip-support/Cargo.toml @@ -28,9 +28,9 @@ scale-info = {workspace = true, features = ["derive"]} # Substrate dependencies frame-system.workspace = true frame-support.workspace = true -sp-runtime.workspace = true sp-core.workspace = true sp-io.workspace = true +sp-runtime.workspace = true sp-state-machine.workspace = true sp-std.workspace = true sp-trie.workspace = true @@ -51,6 +51,7 @@ sp-io = { workspace = true, features = ["std"] } default = ["std"] std = [ "hash-db/std", + "log/std", "did/std", "pallet-dip-consumer/std", "pallet-dip-provider/std", @@ -59,9 +60,9 @@ std = [ "scale-info/std", "frame-system/std", "frame-support/std", - "sp-runtime/std", "sp-core/std", "sp-io/std", + "sp-runtime/std", "sp-state-machine/std", "sp-std/std", "sp-trie/std", diff --git a/dip-template/runtimes/dip-provider/Cargo.toml b/dip-template/runtimes/dip-provider/Cargo.toml index 166f4d29e8..19da12ee26 100644 --- a/dip-template/runtimes/dip-provider/Cargo.toml +++ b/dip-template/runtimes/dip-provider/Cargo.toml @@ -23,6 +23,7 @@ did.workspace = true kilt-support.workspace = true kilt-dip-support.workspace = true kilt-runtime-api-dip-provider.workspace = true +pallet-deposit-storage.workspace = true pallet-did-lookup.workspace = true pallet-dip-provider.workspace = true pallet-web3-names.workspace = true @@ -75,6 +76,7 @@ std = [ "kilt-support/std", "kilt-dip-support/std", "kilt-runtime-api-dip-provider/std", + "pallet-deposit-storage/std", "pallet-did-lookup/std", "pallet-dip-provider/std", "pallet-web3-names/std", @@ -113,7 +115,6 @@ std = [ ] runtime-benchmarks = [ "did/runtime-benchmarks", - "kilt-support/runtime-benchmarks", "kilt-dip-support/runtime-benchmarks", "pallet-did-lookup/runtime-benchmarks", "pallet-dip-provider/runtime-benchmarks", diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 224a65ebbb..bdf757b926 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -18,10 +18,7 @@ use did::{DidRawOrigin, EnsureDidOrigin, KeyIdOf}; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_provider::{ - traits::{IdentityProvider, NoopHooks}, - IdentityCommitmentVersion, -}; +use pallet_dip_provider::{traits::IdentityProvider, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode}; use runtime_common::dip::{ did::LinkedDidInfoProviderOf, @@ -30,7 +27,7 @@ use runtime_common::dip::{ use scale_info::TypeInfo; use sp_std::vec::Vec; -use crate::{AccountId, DidIdentifier, Hash, Runtime, RuntimeEvent}; +use crate::{AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent}; pub mod runtime_api { use super::*; @@ -53,112 +50,36 @@ pub mod runtime_api { } pub mod deposit { - use super::*; - use crate::{Balance, Balances, RuntimeHoldReason}; - - use frame_support::traits::{fungible::Inspect, tokens::fungible::MutateHold}; + use crate::{Balance, RuntimeHoldReason, UNIT}; - use kilt_support::{traits::StorageDepositCollector, Deposit}; - use pallet_dip_provider::{traits::ProviderHooks, HoldReason}; - use sp_runtime::DispatchError; + use super::*; - pub enum CommitmentDepositCollectorError { - Internal, - } + use frame_support::traits::Get; + use pallet_deposit_storage::{StorageDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH}; + use sp_core::{ConstU128, ConstU32}; + use sp_runtime::BoundedVec; - impl From for u16 { - fn from(value: CommitmentDepositCollectorError) -> Self { - match value { - CommitmentDepositCollectorError::Internal => u16::MAX, - } - } - } + pub struct Namespace; - impl From for DispatchError { - fn from(value: CommitmentDepositCollectorError) -> Self { - match value { - CommitmentDepositCollectorError::Internal => { - DispatchError::Other("CommitmentDepositCollectorError::Internal") - } - } + impl Get>> for Namespace { + fn get() -> BoundedVec> { + (*b"DipProvider").to_vec().try_into().expect("Should never fail.") } } - pub const DEPOSIT: Balance = 100_000; - - // TODO: Store deposits somewhere, so that they can be freed up even after the - // deposit amount changes. - // TODO: Define a new pallet storing all the deposits, and bind this to that - // pallet, so that this cannot be used without the runtime deploying that pallet - // as well. Move this inside that pallet altogether. - pub struct CommitmentDepositCollector; - - impl StorageDepositCollector - for CommitmentDepositCollector - { - type Currency = Balances; - type Reason = HoldReason; - - fn reason() -> Self::Reason { - Self::Reason::Deposit - } - - fn deposit( - key: &(AccountId, IdentityCommitmentVersion), - ) -> Result>::Balance>, DispatchError> { - log::error!("CommitmentDepositCollector::deposit(key) called, when it should not have, since it returns a dummy value."); - Err(CommitmentDepositCollectorError::Internal.into()) - } - - fn deposit_amount( - key: &(AccountId, IdentityCommitmentVersion), - ) -> >::Balance { - DEPOSIT - } - - fn get_hashed_key(key: &(AccountId, IdentityCommitmentVersion)) -> Result, DispatchError> { - log::error!("CommitmentDepositCollector::get_hashed_key(key) called, when it should not have, since it returns a dummy value."); - Err(CommitmentDepositCollectorError::Internal.into()) - } - - fn store_deposit( - key: &(AccountId, IdentityCommitmentVersion), - deposit: Deposit>::Balance>, - ) -> Result<(), DispatchError> { - log::error!("CommitmentDepositCollector::get_hashed_key(key) called, when it should not have, since it returns a dummy value."); - Err(CommitmentDepositCollectorError::Internal.into()) - } - } + pub const DEPOSIT_AMOUNT: Balance = 100 * UNIT; - impl ProviderHooks for CommitmentDepositCollector { - type Error = CommitmentDepositCollectorError; - type Identifier = DidIdentifier; - type IdentityCommitment = Hash; - type Submitter = AccountId; - type Success = (); - - fn on_identity_committed( - identifier: &Self::Identifier, - submitter: &Self::Submitter, - commitment: &Self::IdentityCommitment, - version: IdentityCommitmentVersion, - ) -> Result { - let _deposit = Self::create_deposit(submitter, DEPOSIT); - // TODO: Store deposit somewhere, perhaps inside the provider pallet, via some - // metadata tricks? - Ok(()) - } + pub type DepositCollectorHooks = StorageDepositCollectorViaDepositsPallet< + Runtime, + Namespace, + ConstU128, + (AccountId, IdentityCommitmentVersion), + RuntimeHoldReason, + >; +} - fn on_commitment_removed( - identifier: &Self::Identifier, - submitter: &Self::Submitter, - commitment: &Self::IdentityCommitment, - version: IdentityCommitmentVersion, - ) -> Result { - let deposit = Self::deposit((submitter, version))?; - Self::free_deposit(deposit) - } - } +impl pallet_deposit_storage::Config for Runtime { + type Currency = Balances; } impl pallet_dip_provider::Config for Runtime { @@ -170,7 +91,6 @@ impl pallet_dip_provider::Config for Runtime { type IdentityCommitmentGeneratorError = DidMerkleProofError; type IdentityProvider = LinkedDidInfoProviderOf; type IdentityProviderError = as IdentityProvider>::Error; - // TODO: Change to deposit collector - type ProviderHooks = NoopHooks; + type ProviderHooks = deposit::DepositCollectorHooks; type RuntimeEvent = RuntimeEvent; } diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index d576deaf98..af36953dea 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -137,7 +137,8 @@ construct_runtime!( Web3Names: pallet_web3_names = 32, // DIP - DipProvider: pallet_dip_provider = 40, + DepositStorage: pallet_deposit_storage = 40, + DipProvider: pallet_dip_provider = 41, } ); diff --git a/out.txt b/out.txt index dc1d6e62d6..2bb7cc4671 100644 --- a/out.txt +++ b/out.txt @@ -1 +1,1915 @@ -pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) +sp-io v23.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) +│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) +│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) +│ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ [dev-dependencies] +│ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) +│ │ │ └── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ └── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ [dev-dependencies] +│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) +│ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ └── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-provider) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ │ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) +│ │ │ │ └── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ └── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ [dev-dependencies] +│ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) +│ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ [dev-dependencies] +│ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ [dev-dependencies] +│ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ └── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) +│ │ └── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ └── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ └── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ └── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ └── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ └── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ │ └── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ [dev-dependencies] +│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +├── frame-remote-externalities v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ └── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) (*) +│ │ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) +│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) (*) +│ │ │ ├── kilt-runtime-api-public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/public-credentials) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) +│ │ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ └── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) +│ │ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ [dev-dependencies] +│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ │ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ │ └── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +│ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ [dev-dependencies] +│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ └── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-authorship v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-balances v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) (*) +│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ [dev-dependencies] +│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ │ │ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) +│ │ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +│ │ │ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) +│ │ │ └── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +│ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) +│ │ ├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) +│ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +│ │ ├── pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) (*) +│ │ ├── pallet-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-provider) (*) +│ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) +│ │ ├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-nis v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-postit v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/pallets/pallet-postit) +│ │ │ └── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) (*) +│ │ ├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ [dev-dependencies] +│ │ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ ├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ [dev-dependencies] +│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ │ └── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── pallet-transaction-payment-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-vesting v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) +│ │ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── frame-try-runtime v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ ├── kilt-asset-dids v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/assets) +│ │ └── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) (*) +│ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-authorship v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-balances v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) +│ ├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) +│ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +│ ├── pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) (*) +│ ├── pallet-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-provider) (*) +│ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) +│ ├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-nis v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-postit v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/pallets/pallet-postit) (*) +│ ├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) (*) +│ ├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-vesting v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) +│ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── polkadot-parachain v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ └── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ └── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ └── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ │ └── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── cumulus-primitives-timestamp v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ │ └── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-test-relay-sproof-builder v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ └── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ └── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-erasure-coding v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-jaeger v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ ├── polkadot-node-subsystem v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-subsystem v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-subsystem v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── tracing-gum v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ └── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ │ └── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-test-relay-sproof-builder v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-erasure-coding v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-jaeger v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ └── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-statement-table v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── tracing-gum v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +│ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ ├── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ └── xcm-executor v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +├── sc-executor v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ ├── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ ├── substrate-rpc-client v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── frame-remote-externalities v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── substrate-state-trie-migration-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ └── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-client-db v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── sc-storage-monitor v0.1.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ └── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-jaeger v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-network-gossip v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ │ └── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ ├── sc-network-gossip v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ └── substrate-state-trie-migration-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── sc-sysinfo v6.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── sp-application-crypto v23.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sc-keystore v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ ├── sp-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ └── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ [dev-dependencies] +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ └── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ └── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ ├── sp-consensus-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ ├── sp-runtime v24.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +│ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) +│ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── cumulus-test-relay-sproof-builder v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) +│ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) +│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-remote-externalities v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── frame-try-runtime v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ ├── kilt-runtime-api-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/staking) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) (*) +│ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-authorship v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-balances v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) +│ │ ├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) +│ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +│ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) +│ │ ├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) +│ │ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-nis v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-postit v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/pallets/pallet-postit) (*) +│ │ ├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) (*) +│ │ ├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-transaction-payment-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-vesting v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) +│ │ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-core-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-parachain v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-parachain v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +│ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-client-db v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-gossip v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sc-transaction-pool-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── slot-range-helper v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) +│ │ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sp-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── frame-system-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── frame-try-runtime v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) (*) +│ │ │ ├── kilt-runtime-api-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/dip-provider) +│ │ │ │ └── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── kilt-runtime-api-public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/public-credentials) (*) +│ │ │ ├── kilt-runtime-api-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/staking) (*) +│ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-transaction-payment-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-executor v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-block-builder v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-blockchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-client-db v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-transaction-pool-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-mmr-primitives v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── sp-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── sp-statement-store v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ ├── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-block-builder v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-blockchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── sp-blockchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-consensus-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-inherents v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── cumulus-primitives-timestamp v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-block-builder v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── cumulus-primitives-timestamp v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) +│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) +│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) +│ │ │ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── sp-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ │ └── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-transaction-storage-proof v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-keyring v24.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── sp-mmr-primitives v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-npos-elections v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ ├── sp-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ └── sp-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-statement-store v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-transaction-storage-proof v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── sp-version v22.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) +│ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) +│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) +│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) +│ │ │ ├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) +│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-executor v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── sp-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) +│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +│ │ ├── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── substrate-rpc-client v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── substrate-state-trie-migration-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +│ │ ├── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ │ └── xcm-executor v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +│ └── sp-statement-store v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── sp-runtime v24.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) +├── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) +├── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +└── xcm-executor v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) +[dev-dependencies] +├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) +├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) +├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) +├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) +├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) +├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) +├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) +├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) +├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) +├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) +└── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index 06d9cc518b..de31d09c84 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -28,7 +28,7 @@ use kilt_support::{traits::StorageDepositCollector, Deposit}; use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; use parity_scale_codec::Encode; use sp_runtime::traits::{Get, Hash}; -use sp_std::marker::PhantomData; +use sp_std::{marker::PhantomData, vec::Vec}; use crate::{AccountIdOf, BalanceOf, Config, Deposits, Error, HoldReason, MAX_NAMESPACE_LENGTH}; diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 4ee9a1cc66..7655f0620c 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -16,6 +16,9 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org +#![cfg_attr(not(feature = "std"), no_std)] +#![recursion_limit = "256"] + mod deposit; pub use deposit::StorageDepositCollectorViaDepositsPallet; From 8deb83379536f10b3bad7bdf69e4cb8055a41aba Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 13:28:00 +0100 Subject: [PATCH 06/46] Remove temp file --- out.txt | 1915 ------------------------------------------------------- 1 file changed, 1915 deletions(-) delete mode 100644 out.txt diff --git a/out.txt b/out.txt deleted file mode 100644 index 2bb7cc4671..0000000000 --- a/out.txt +++ /dev/null @@ -1,1915 +0,0 @@ -sp-io v23.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) -│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) -│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) -│ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ [dev-dependencies] -│ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) -│ │ │ └── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ └── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ [dev-dependencies] -│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) -│ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ └── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-provider) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ │ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) -│ │ │ │ └── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ └── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ [dev-dependencies] -│ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) -│ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ [dev-dependencies] -│ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ [dev-dependencies] -│ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ └── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) -│ │ └── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ └── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ └── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ └── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ └── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ └── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ │ └── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ [dev-dependencies] -│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -├── frame-remote-externalities v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ └── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) (*) -│ │ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) -│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) (*) -│ │ │ ├── kilt-runtime-api-public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/public-credentials) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) -│ │ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ └── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) -│ │ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ [dev-dependencies] -│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ │ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ │ └── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -│ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ [dev-dependencies] -│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ └── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-authorship v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-balances v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) (*) -│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ [dev-dependencies] -│ │ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ │ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ │ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ │ │ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) -│ │ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -│ │ │ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) -│ │ │ └── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -│ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) -│ │ ├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) -│ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -│ │ ├── pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) (*) -│ │ ├── pallet-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-provider) (*) -│ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) -│ │ ├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-nis v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-postit v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/pallets/pallet-postit) -│ │ │ └── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) (*) -│ │ ├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ [dev-dependencies] -│ │ │ └── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ ├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ [dev-dependencies] -│ │ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ │ └── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── pallet-transaction-payment-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-vesting v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) -│ │ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── frame-try-runtime v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ └── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ ├── kilt-asset-dids v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/assets) -│ │ └── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) (*) -│ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-authorship v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-balances v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) -│ ├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) -│ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -│ ├── pallet-dip-consumer v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-consumer) (*) -│ ├── pallet-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-dip-provider) (*) -│ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) -│ ├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-nis v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-postit v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/pallets/pallet-postit) (*) -│ ├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) (*) -│ ├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-vesting v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) -│ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── polkadot-parachain v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ └── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ └── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ └── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ │ └── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── cumulus-primitives-timestamp v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ │ └── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-test-relay-sproof-builder v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ └── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ └── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-erasure-coding v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-jaeger v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ ├── polkadot-node-subsystem v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-subsystem v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-subsystem v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── tracing-gum v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ └── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ │ └── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-test-relay-sproof-builder v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-approval-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-availability-bitfield-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-availability-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-erasure-coding v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-collation-generation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-bitfield-signing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-candidate-validation v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-chain-selection v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-provisioner v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf-checker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf-execute-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-jaeger v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ └── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-statement-table v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ │ ├── polkadot-node-core-backing v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── tracing-gum v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -│ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ ├── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ └── xcm-executor v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ └── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -├── sc-executor v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-node-core-pvf-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-node-core-pvf-prepare-worker v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ └── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ ├── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ ├── substrate-rpc-client v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── frame-remote-externalities v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── substrate-state-trie-migration-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ └── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-client-db v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── sc-storage-monitor v0.1.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ └── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ │ ├── polkadot-availability-recovery v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-jaeger v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-network-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-network-gossip v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ │ └── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ ├── sc-network-gossip v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-metrics v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ └── substrate-state-trie-migration-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── sc-sysinfo v6.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ └── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── sp-application-crypto v23.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── polkadot-dispute-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-gossip-support v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-node-subsystem-util v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sc-keystore v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-dispute-coordinator v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ ├── sp-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ └── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ [dev-dependencies] -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ └── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── polkadot-node-core-runtime-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ └── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ ├── sp-consensus-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ ├── sp-runtime v24.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ ├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -│ │ ├── ctype v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/ctype) (*) -│ │ ├── cumulus-client-cli v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-aura-ext v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-dmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-session-benchmarking v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-xcm v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-pallet-xcmp-queue v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-primitives-utility v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── cumulus-test-relay-sproof-builder v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── delegation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/delegation) (*) -│ │ ├── did v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/did) (*) -│ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-executive v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-remote-externalities v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── frame-try-runtime v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ ├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -│ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ ├── kilt-runtime-api-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/staking) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── kilt-support v1.12.0-dev (/home/antonio/Developer/kilt-node/support) (*) -│ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ └── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── pallet-aura v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-authorship v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-balances v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-child-bounties v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── pallet-collective v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) -│ │ ├── pallet-democracy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-deposit-storage v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-deposit-storage) (*) -│ │ ├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -│ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-identity v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) -│ │ ├── pallet-membership v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-message-queue v7.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-migration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-migration) (*) -│ │ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-multisig v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-nis v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-postit v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/pallets/pallet-postit) (*) -│ │ ├── pallet-preimage v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-proxy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-recovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-relay-store v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-relay-store) (*) -│ │ ├── pallet-scheduler v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-society v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-state-trie-migration v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-sudo v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-tips v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-transaction-payment v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-transaction-payment-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-treasury v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-utility v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-vesting v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) -│ │ ├── pallet-xcm v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── parachain-info v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ ├── polkadot-collator-protocol v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-core-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── polkadot-node-core-pvf v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-parachain v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-node-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-parachain v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -│ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── rococo-runtime-constants v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -│ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-client-db v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-beefy-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-gossip v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sc-transaction-pool-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── slot-range-helper v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) -│ │ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sp-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-core v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-rpc-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── frame-benchmarking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── frame-system-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── frame-try-runtime v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ ├── kilt-runtime-api-did v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/did) (*) -│ │ │ ├── kilt-runtime-api-dip-provider v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/dip-provider) -│ │ │ │ └── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── kilt-runtime-api-public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/public-credentials) (*) -│ │ │ ├── kilt-runtime-api-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/runtime-api/staking) (*) -│ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-beefy-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-transaction-payment-rpc-runtime-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-node-subsystem-types v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-overseer v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-executor v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-block-builder v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-blockchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-relay-chain-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── pallet-transaction-payment-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── polkadot-node-core-chain-api v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-authority-discovery v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-chain-spec v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-client-db v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-epochs v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-grandpa-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-informant v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network-bitswap v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network-light v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-sync-state-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-tracing v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-transaction-pool-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ └── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-mmr-primitives v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── mmr-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── pallet-mmr v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── sp-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── sp-statement-store v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sc-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ ├── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-authority-discovery v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-block-builder v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-blockchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-collator v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-network v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-pov-recovery v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-service v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-inprocess-interface v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-relay-chain-minimal-node v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── mmr-gadget v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── polkadot-network-bridge v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-node-core-av-store v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-rpc v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-client-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe-rpc v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-grandpa v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-network-common v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-network-sync v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-network-transactions v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── sp-blockchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-consensus-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-inherents v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-client-consensus-proposer v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-parachain-inherent v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── cumulus-primitives-timestamp v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── frame-benchmarking-cli v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-node-core-parachains-inherent v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-basic-authorship v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-block-builder v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-block-builder v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── cumulus-client-consensus-aura v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── cumulus-primitives-timestamp v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ ├── dip-consumer-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-consumer) -│ │ │ │ ├── dip-provider-node-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/nodes/dip-provider) -│ │ │ │ ├── kilt-parachain v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/parachain) -│ │ │ │ ├── pallet-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── sp-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ │ ├── cumulus-client-consensus-common v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ │ │ ├── polkadot-node-core-approval-voting v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ │ │ ├── sc-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sc-consensus-slots v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ ├── sp-consensus-aura v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ │ └── sp-consensus-babe v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-transaction-storage-proof v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-keyring v24.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── pallet-indices v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── polkadot-cli v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── sp-mmr-primitives v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-npos-elections v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── frame-election-provider-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-election-provider-multi-phase v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ └── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ ├── sp-offchain v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── frame-support v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-babe v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-collator-selection v3.0.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── pallet-elections-phragmen v5.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-fast-unstake v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-grandpa v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-im-online v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-offences v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── pallet-staking v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -│ │ │ ├── polkadot-primitives v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-common v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-runtime-parachains v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── polkadot-statement-distribution v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ └── sp-session v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-statement-store v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-timestamp v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-transaction-pool v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-transaction-storage-proof v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── sp-version v22.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) -│ │ │ ├── cumulus-pallet-parachain-system v0.1.0 (https://github.com/paritytech/cumulus?branch=polkadot-v1.0.0#0d17cf6b) (*) -│ │ │ ├── dip-consumer-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-consumer) (*) -│ │ │ ├── dip-provider-runtime-template v1.12.0-dev (/home/antonio/Developer/kilt-node/dip-template/runtimes/dip-provider) (*) -│ │ │ ├── frame-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── kestrel-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/kestrel) (*) -│ │ │ ├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -│ │ │ ├── polkadot-service v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── rococo-runtime v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ │ ├── sc-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-executor v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc-api v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-rpc-spec-v2 v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sc-service v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── sp-api v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ │ └── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) -│ │ ├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -│ │ ├── substrate-frame-rpc-system v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── substrate-rpc-client v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── substrate-state-trie-migration-rpc v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -│ │ ├── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ │ └── xcm-executor v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -│ └── sp-statement-store v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── sp-consensus-beefy v4.0.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── sp-runtime v24.0.0 (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── standalone-node v1.12.0-dev (/home/antonio/Developer/kilt-node/nodes/standalone) -├── try-runtime-cli v0.10.0-dev (https://github.com/paritytech/substrate?branch=polkadot-v1.0.0#948fbd2f) (*) -├── xcm-builder v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -└── xcm-executor v1.0.0 (https://github.com/paritytech/polkadot?branch=release-v1.0.0#c9ec8c5a) (*) -[dev-dependencies] -├── attestation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/attestation) (*) -├── kilt-dip-support v1.12.0-dev (/home/antonio/Developer/kilt-node/crates/kilt-dip-support) (*) -├── pallet-configuration v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-configuration) (*) -├── pallet-did-lookup v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-did-lookup) (*) -├── pallet-inflation v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-inflation) (*) -├── pallet-web3-names v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/pallet-web3-names) (*) -├── parachain-staking v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/parachain-staking) (*) -├── peregrine-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/peregrine) (*) -├── public-credentials v1.12.0-dev (/home/antonio/Developer/kilt-node/pallets/public-credentials) (*) -├── runtime-common v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/common) (*) -└── spiritnet-runtime v1.12.0-dev (/home/antonio/Developer/kilt-node/runtimes/spiritnet) (*) From 52af0617ef454bcd3aec5af6dbbc9d9f85948f8f Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 15:50:09 +0100 Subject: [PATCH 07/46] Cleanup --- pallets/pallet-deposit-storage/src/deposit.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index de31d09c84..ac2cc408d9 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -95,11 +95,14 @@ where } } -type DepositKey = (AccountIdOf, IdentityCommitmentVersion); - impl ProviderHooks - for StorageDepositCollectorViaDepositsPallet, RuntimeHoldReason> -where + for StorageDepositCollectorViaDepositsPallet< + Runtime, + Namespace, + DepositAmount, + (AccountIdOf, IdentityCommitmentVersion), + RuntimeHoldReason, + > where Runtime: pallet_dip_provider::Config + Config, Runtime::Currency: MutateHold, Reason = RuntimeHoldReason>, Namespace: Get>>, From e93d5c50cdfe81d27c9373f187ed9630b3f432e1 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 17:30:49 +0100 Subject: [PATCH 08/46] Add reclaim_deposit extrinsic --- pallets/pallet-deposit-storage/src/deposit.rs | 57 ++++++++++++----- pallets/pallet-deposit-storage/src/lib.rs | 62 ++++++++++++++++--- 2 files changed, 97 insertions(+), 22 deletions(-) diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index ac2cc408d9..4bca701f90 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -19,35 +19,43 @@ use frame_support::{ sp_runtime::DispatchError, traits::{ - fungible::{Inspect, MutateHold}, + fungible::{hold::Mutate, Inspect, MutateHold}, + tokens::Precision, ConstU32, }, BoundedVec, }; use kilt_support::{traits::StorageDepositCollector, Deposit}; use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; -use parity_scale_codec::Encode; +use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; +use scale_info::TypeInfo; use sp_runtime::traits::{Get, Hash}; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{AccountIdOf, BalanceOf, Config, Deposits, Error, HoldReason, MAX_NAMESPACE_LENGTH}; +#[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] +pub struct DepositEntry { + pub(crate) deposit: Deposit, + pub(crate) reason: Reason, +} + type HasherOf = ::Hashing; -pub struct StorageDepositCollectorViaDepositsPallet( - PhantomData<(Runtime, Namespace, DepositAmount, Key, RuntimeHoldReason)>, +pub struct StorageDepositCollectorViaDepositsPallet( + PhantomData<(Runtime, Namespace, DepositAmount, Key)>, ); -impl - StorageDepositCollector, Key, RuntimeHoldReason> - for StorageDepositCollectorViaDepositsPallet +impl + StorageDepositCollector, Key, Runtime::RuntimeHoldReason> + for StorageDepositCollectorViaDepositsPallet where Runtime: Config, - Runtime::Currency: MutateHold, Reason = RuntimeHoldReason>, + Runtime::Currency: MutateHold, Reason = Runtime::RuntimeHoldReason>, + Runtime::RuntimeHoldReason: From, Namespace: Get>>, DepositAmount: Get>, Key: Encode, - RuntimeHoldReason: From, { type Currency = Runtime::Currency; type Reason = HoldReason; @@ -62,7 +70,7 @@ where { let namespace = Namespace::get(); let key_hash = HasherOf::::hash(key.encode().as_ref()); - let deposit = Deposits::::get(namespace, key_hash) + let DepositEntry { deposit, .. } = Deposits::::get(namespace, key_hash) .ok_or(DispatchError::from(Error::::DepositNotFound))?; Ok(deposit) } @@ -83,10 +91,14 @@ where ) -> Result<(), DispatchError> { let namespace = Namespace::get(); let key_hash = HasherOf::::hash(key.encode().as_ref()); + let reason = Self::reason(); Deposits::::try_mutate(namespace, key_hash, |deposit_entry| match deposit_entry { Some(_) => Err(Error::::DepositExisting), None => { - *deposit_entry = Some(deposit); + *deposit_entry = Some(DepositEntry { + deposit, + reason: reason.into(), + }); Ok(()) } }) @@ -95,19 +107,18 @@ where } } -impl ProviderHooks +impl ProviderHooks for StorageDepositCollectorViaDepositsPallet< Runtime, Namespace, DepositAmount, (AccountIdOf, IdentityCommitmentVersion), - RuntimeHoldReason, > where Runtime: pallet_dip_provider::Config + Config, - Runtime::Currency: MutateHold, Reason = RuntimeHoldReason>, + Runtime::Currency: MutateHold, Reason = Runtime::RuntimeHoldReason>, + Runtime::RuntimeHoldReason: From, Namespace: Get>>, DepositAmount: Get>, - RuntimeHoldReason: From, { type Error = u16; type Identifier = Runtime::Identifier; @@ -137,3 +148,19 @@ impl ProviderHooks Ok(()) } } + +// Taken from dip_support logic, not to make that pub +pub(crate) fn free_deposit>( + deposit: &Deposit, + reason: &Currency::Reason, +) -> Result<>::Balance, DispatchError> { + let result = Currency::release(reason, &deposit.owner, deposit.amount, Precision::BestEffort); + debug_assert!( + result == Ok(deposit.amount), + "Released deposit amount does not match with expected amount. Expected: {:?}, Released amount: {:?} Error: {:?}", + deposit.amount, + result.ok(), + result.err(), + ); + result +} diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 7655f0620c..eb49c02c7e 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -24,15 +24,22 @@ mod deposit; pub use deposit::StorageDepositCollectorViaDepositsPallet; pub use pallet::*; -#[frame_support::pallet] +#[frame_support::pallet(dev_mode)] pub mod pallet { use super::*; use frame_support::{ pallet_prelude::*, - traits::{fungible::Inspect, ConstU32}, + traits::{ + fungible::{Inspect, MutateHold}, + ConstU32, EnsureOrigin, + }, }; - use kilt_support::Deposit; + use frame_system::pallet_prelude::*; + use parity_scale_codec::FullCodec; + use sp_std::fmt::Debug; + + use deposit::{free_deposit, DepositEntry}; /// The current storage version. const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); @@ -40,10 +47,15 @@ pub mod pallet { pub type AccountIdOf = ::AccountId; pub type BalanceOf = <::Currency as Inspect>>::Balance; + pub type DepositKey = ::Hash; + pub type Namespace = BoundedVec>; #[pallet::config] pub trait Config: frame_system::Config { - type Currency: Inspect; + type CheckOrigin: EnsureOrigin; + type Currency: MutateHold; + type RuntimeEvent: From> + IsType<::RuntimeEvent>; + type RuntimeHoldReason: Clone + PartialEq + Debug + FullCodec + MaxEncodedLen + TypeInfo; } #[pallet::composite_enum] @@ -55,6 +67,13 @@ pub mod pallet { pub enum Error { DepositNotFound, DepositExisting, + Unauthorized, + } + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + DepositReclaimed(DepositEntry, BalanceOf, T::RuntimeHoldReason>), } // Double map (namespace, key) -> deposit @@ -62,13 +81,42 @@ pub mod pallet { pub type Deposits = StorageDoubleMap< _, Twox64Concat, - BoundedVec>, + Namespace, Twox64Concat, - ::Hash, - Deposit<::AccountId, BalanceOf>, + DepositKey, + DepositEntry, BalanceOf, ::RuntimeHoldReason>, >; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] pub struct Pallet(_); + + #[pallet::call] + impl Pallet { + #[pallet::call_index(0)] + // TODO: Update weight + #[pallet::weight(0)] + pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKey) -> DispatchResult { + let dispatcher = T::CheckOrigin::ensure_origin(origin)?; + + Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { + None => Err(DispatchError::from(Error::::DepositNotFound)), + Some(ref existing_deposit_entry) => { + ensure!( + existing_deposit_entry.deposit.owner == dispatcher, + DispatchError::from(Error::::Unauthorized) + ); + + free_deposit::, T::Currency>( + &existing_deposit_entry.deposit, + &existing_deposit_entry.reason, + )?; + Self::deposit_event(Event::::DepositReclaimed(existing_deposit_entry.clone())); + *deposit_entry = None; + Ok(()) + } + })?; + Ok(()) + } + } } From f80e2d4bfac6eae9cff6dcece4597f9ff294f410 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 17:46:35 +0100 Subject: [PATCH 09/46] Minor chores --- pallets/pallet-deposit-storage/src/lib.rs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index eb49c02c7e..ed3e9f2020 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -48,6 +48,7 @@ pub mod pallet { pub type AccountIdOf = ::AccountId; pub type BalanceOf = <::Currency as Inspect>>::Balance; pub type DepositKey = ::Hash; + pub type DepositEntryOf = DepositEntry, BalanceOf, ::RuntimeHoldReason>; pub type Namespace = BoundedVec>; #[pallet::config] @@ -73,19 +74,12 @@ pub mod pallet { #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { - DepositReclaimed(DepositEntry, BalanceOf, T::RuntimeHoldReason>), + DepositReclaimed(DepositEntryOf), } // Double map (namespace, key) -> deposit #[pallet::storage] - pub type Deposits = StorageDoubleMap< - _, - Twox64Concat, - Namespace, - Twox64Concat, - DepositKey, - DepositEntry, BalanceOf, ::RuntimeHoldReason>, - >; + pub type Deposits = StorageDoubleMap<_, Twox64Concat, Namespace, Twox64Concat, DepositKey, DepositEntryOf>; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] From 8041942603774868b9dc91ce26f1a63ff6405b58 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 2 Nov 2023 18:00:13 +0100 Subject: [PATCH 10/46] Fix compilation issues --- dip-template/runtimes/dip-provider/src/dip.rs | 9 ++++++--- pallets/pallet-dip-provider/src/lib.rs | 5 ----- pallets/pallet-dip-provider/src/traits.rs | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index bdf757b926..29f405050a 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -17,6 +17,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org use did::{DidRawOrigin, EnsureDidOrigin, KeyIdOf}; +use frame_system::EnsureSigned; use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_provider::{traits::IdentityProvider, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode}; @@ -27,7 +28,7 @@ use runtime_common::dip::{ use scale_info::TypeInfo; use sp_std::vec::Vec; -use crate::{AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent}; +use crate::{AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason}; pub mod runtime_api { use super::*; @@ -50,7 +51,7 @@ pub mod runtime_api { } pub mod deposit { - use crate::{Balance, RuntimeHoldReason, UNIT}; + use crate::{Balance, UNIT}; use super::*; @@ -74,12 +75,14 @@ pub mod deposit { Namespace, ConstU128, (AccountId, IdentityCommitmentVersion), - RuntimeHoldReason, >; } impl pallet_deposit_storage::Config for Runtime { + type CheckOrigin = EnsureSigned; type Currency = Balances; + type RuntimeEvent = RuntimeEvent; + type RuntimeHoldReason = RuntimeHoldReason; } impl pallet_dip_provider::Config for Runtime { diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 767e555760..113367b4b7 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -42,11 +42,6 @@ pub mod pallet { pub const MAX_COMMITMENTS_PER_IDENTITY: u16 = LATEST_COMMITMENT_VERSION + 1; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); - #[pallet::composite_enum] - pub enum HoldReason { - Deposit, - } - #[pallet::config] pub trait Config: frame_system::Config { type CommitOriginCheck: EnsureOrigin; diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 3b13a96b0f..b8d555407a 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -16,10 +16,10 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use core::marker::PhantomData; +use did::DidRawOrigin; +use sp_std::marker::PhantomData; use crate::IdentityCommitmentVersion; -use did::DidRawOrigin; pub use identity_generation::*; pub mod identity_generation { From 8c749b1a5c52afa99a4353cef7572de78d5712c0 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 10:21:15 +0100 Subject: [PATCH 11/46] Add extrinsic to add deposit --- pallets/pallet-deposit-storage/src/lib.rs | 32 ++++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index ed3e9f2020..0976c31053 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -26,6 +26,8 @@ pub use pallet::*; #[frame_support::pallet(dev_mode)] pub mod pallet { + use crate::deposit::{reserve_deposit, DepositEntry}; + use super::*; use frame_support::{ @@ -39,7 +41,7 @@ pub mod pallet { use parity_scale_codec::FullCodec; use sp_std::fmt::Debug; - use deposit::{free_deposit, DepositEntry}; + use deposit::free_deposit; /// The current storage version. const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); @@ -47,7 +49,7 @@ pub mod pallet { pub type AccountIdOf = ::AccountId; pub type BalanceOf = <::Currency as Inspect>>::Balance; - pub type DepositKey = ::Hash; + pub type DepositKeyOf = ::Hash; pub type DepositEntryOf = DepositEntry, BalanceOf, ::RuntimeHoldReason>; pub type Namespace = BoundedVec>; @@ -74,12 +76,15 @@ pub mod pallet { #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { + DepositAdded(DepositEntryOf), DepositReclaimed(DepositEntryOf), } // Double map (namespace, key) -> deposit #[pallet::storage] - pub type Deposits = StorageDoubleMap<_, Twox64Concat, Namespace, Twox64Concat, DepositKey, DepositEntryOf>; + #[pallet::getter(fn deposits)] + pub(crate) type Deposits = + StorageDoubleMap<_, Twox64Concat, Namespace, Twox64Concat, DepositKeyOf, DepositEntryOf>; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -90,7 +95,7 @@ pub mod pallet { #[pallet::call_index(0)] // TODO: Update weight #[pallet::weight(0)] - pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKey) -> DispatchResult { + pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKeyOf) -> DispatchResult { let dispatcher = T::CheckOrigin::ensure_origin(origin)?; Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { @@ -113,4 +118,23 @@ pub mod pallet { Ok(()) } } + + impl Pallet { + pub fn add_deposit(namespace: Namespace, key: DepositKeyOf, entry: DepositEntryOf) -> DispatchResult { + Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { + Some(_) => Err(DispatchError::from(Error::::DepositExisting)), + None => { + reserve_deposit::, T::Currency>( + entry.deposit.owner.clone(), + entry.deposit.amount, + &entry.reason, + )?; + Self::deposit_event(Event::::DepositAdded(entry.clone())); + *deposit_entry = Some(entry); + Ok(()) + } + })?; + Ok(()) + } + } } From ee31f76cfdad3cfbbc0fd8cc94cc40c28d28a33d Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 11:40:33 +0100 Subject: [PATCH 12/46] Compiling --- dip-template/runtimes/dip-provider/src/dip.rs | 14 +-- pallets/pallet-deposit-storage/src/deposit.rs | 117 ++++++------------ pallets/pallet-deposit-storage/src/lib.rs | 58 +++++---- 3 files changed, 74 insertions(+), 115 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 29f405050a..16489c5fff 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -51,12 +51,12 @@ pub mod runtime_api { } pub mod deposit { - use crate::{Balance, UNIT}; - use super::*; + use crate::{Balance, UNIT}; + use frame_support::traits::Get; - use pallet_deposit_storage::{StorageDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH}; + use pallet_deposit_storage::{FixedDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH}; use sp_core::{ConstU128, ConstU32}; use sp_runtime::BoundedVec; @@ -70,12 +70,8 @@ pub mod deposit { pub const DEPOSIT_AMOUNT: Balance = 100 * UNIT; - pub type DepositCollectorHooks = StorageDepositCollectorViaDepositsPallet< - Runtime, - Namespace, - ConstU128, - (AccountId, IdentityCommitmentVersion), - >; + pub type DepositCollectorHooks = + FixedDepositCollectorViaDepositsPallet>; } impl pallet_deposit_storage::Config for Runtime { diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index 4bca701f90..cd42f55725 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -19,20 +19,20 @@ use frame_support::{ sp_runtime::DispatchError, traits::{ - fungible::{hold::Mutate, Inspect, MutateHold}, + fungible::{hold::Mutate, Inspect}, tokens::Precision, ConstU32, }, BoundedVec, }; -use kilt_support::{traits::StorageDepositCollector, Deposit}; +use kilt_support::Deposit; use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::traits::{Get, Hash}; -use sp_std::{marker::PhantomData, vec::Vec}; +use sp_std::marker::PhantomData; -use crate::{AccountIdOf, BalanceOf, Config, Deposits, Error, HoldReason, MAX_NAMESPACE_LENGTH}; +use crate::{AccountIdOf, BalanceOf, Config, HoldReason, Pallet, MAX_NAMESPACE_LENGTH}; #[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] pub struct DepositEntry { @@ -42,83 +42,16 @@ pub struct DepositEntry { type HasherOf = ::Hashing; -pub struct StorageDepositCollectorViaDepositsPallet( - PhantomData<(Runtime, Namespace, DepositAmount, Key)>, +pub struct FixedDepositCollectorViaDepositsPallet( + PhantomData<(Runtime, DepositsNamespace, FixedDepositAmount)>, ); -impl - StorageDepositCollector, Key, Runtime::RuntimeHoldReason> - for StorageDepositCollectorViaDepositsPallet +impl ProviderHooks + for FixedDepositCollectorViaDepositsPallet where - Runtime: Config, - Runtime::Currency: MutateHold, Reason = Runtime::RuntimeHoldReason>, - Runtime::RuntimeHoldReason: From, - Namespace: Get>>, - DepositAmount: Get>, - Key: Encode, -{ - type Currency = Runtime::Currency; - type Reason = HoldReason; - - fn reason() -> Self::Reason { - HoldReason::Deposit - } - - fn deposit( - key: &Key, - ) -> Result, >>::Balance>, DispatchError> - { - let namespace = Namespace::get(); - let key_hash = HasherOf::::hash(key.encode().as_ref()); - let DepositEntry { deposit, .. } = Deposits::::get(namespace, key_hash) - .ok_or(DispatchError::from(Error::::DepositNotFound))?; - Ok(deposit) - } - - fn deposit_amount(_key: &Key) -> >>::Balance { - DepositAmount::get() - } - - fn get_hashed_key(key: &Key) -> Result, DispatchError> { - let namespace = Namespace::get(); - let key_hash = HasherOf::::hash(key.encode().as_ref()); - Ok(Deposits::::hashed_key_for(namespace, key_hash)) - } - - fn store_deposit( - key: &Key, - deposit: Deposit, >>::Balance>, - ) -> Result<(), DispatchError> { - let namespace = Namespace::get(); - let key_hash = HasherOf::::hash(key.encode().as_ref()); - let reason = Self::reason(); - Deposits::::try_mutate(namespace, key_hash, |deposit_entry| match deposit_entry { - Some(_) => Err(Error::::DepositExisting), - None => { - *deposit_entry = Some(DepositEntry { - deposit, - reason: reason.into(), - }); - Ok(()) - } - }) - .map_err(DispatchError::from)?; - Ok(()) - } -} - -impl ProviderHooks - for StorageDepositCollectorViaDepositsPallet< - Runtime, - Namespace, - DepositAmount, - (AccountIdOf, IdentityCommitmentVersion), - > where Runtime: pallet_dip_provider::Config + Config, - Runtime::Currency: MutateHold, Reason = Runtime::RuntimeHoldReason>, - Runtime::RuntimeHoldReason: From, - Namespace: Get>>, - DepositAmount: Get>, + DepositsNamespace: Get>>, + FixedDepositAmount: Get>, { type Error = u16; type Identifier = Runtime::Identifier; @@ -132,8 +65,16 @@ impl ProviderHooks _commitment: &Self::IdentityCommitment, version: IdentityCommitmentVersion, ) -> Result { - let deposit = Self::create_deposit(submitter.clone(), DepositAmount::get()).map_err(|_| 1u16)?; - Self::store_deposit(&(submitter.clone(), version), deposit).map_err(|_| 2u16)?; + let namespace = DepositsNamespace::get(); + let key_hash = HasherOf::::hash((submitter, version).encode().as_ref()); + let deposit_entry = DepositEntry { + deposit: Deposit { + amount: FixedDepositAmount::get(), + owner: submitter.clone(), + }, + reason: HoldReason::Deposit.into(), + }; + Pallet::::add_deposit(namespace, key_hash, deposit_entry).map_err(|_| 1u16)?; Ok(()) } @@ -143,12 +84,26 @@ impl ProviderHooks _commitment: &Self::IdentityCommitment, version: pallet_dip_provider::IdentityCommitmentVersion, ) -> Result { - let deposit = Self::deposit(&(submitter.clone(), version)).map_err(|_| 3u16)?; - Self::free_deposit(deposit).map_err(|_| 4u16)?; + let namespace = DepositsNamespace::get(); + let key_hash = HasherOf::::hash((submitter, version).encode().as_ref()); + Pallet::::remove_deposit(namespace, key_hash, None).map_err(|_| 2u16)?; Ok(()) } } +// Taken from dip_support logic, not to make that pub +pub(crate) fn reserve_deposit>( + account: Account, + deposit_amount: Currency::Balance, + reason: &Currency::Reason, +) -> Result, DispatchError> { + Currency::hold(reason, &account, deposit_amount)?; + Ok(Deposit { + owner: account, + amount: deposit_amount, + }) +} + // Taken from dip_support logic, not to make that pub pub(crate) fn free_deposit>( deposit: &Deposit, diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 0976c31053..8acec6625d 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -21,19 +21,19 @@ mod deposit; -pub use deposit::StorageDepositCollectorViaDepositsPallet; +pub use deposit::FixedDepositCollectorViaDepositsPallet; pub use pallet::*; #[frame_support::pallet(dev_mode)] pub mod pallet { - use crate::deposit::{reserve_deposit, DepositEntry}; + use crate::deposit::{free_deposit, reserve_deposit, DepositEntry}; use super::*; use frame_support::{ pallet_prelude::*, traits::{ - fungible::{Inspect, MutateHold}, + fungible::{hold::Mutate, Inspect}, ConstU32, EnsureOrigin, }, }; @@ -41,8 +41,6 @@ pub mod pallet { use parity_scale_codec::FullCodec; use sp_std::fmt::Debug; - use deposit::free_deposit; - /// The current storage version. const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); pub const MAX_NAMESPACE_LENGTH: u32 = 16; @@ -56,9 +54,9 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { type CheckOrigin: EnsureOrigin; - type Currency: MutateHold; + type Currency: Mutate; type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type RuntimeHoldReason: Clone + PartialEq + Debug + FullCodec + MaxEncodedLen + TypeInfo; + type RuntimeHoldReason: From + Clone + PartialEq + Debug + FullCodec + MaxEncodedLen + TypeInfo; } #[pallet::composite_enum] @@ -98,24 +96,7 @@ pub mod pallet { pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKeyOf) -> DispatchResult { let dispatcher = T::CheckOrigin::ensure_origin(origin)?; - Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { - None => Err(DispatchError::from(Error::::DepositNotFound)), - Some(ref existing_deposit_entry) => { - ensure!( - existing_deposit_entry.deposit.owner == dispatcher, - DispatchError::from(Error::::Unauthorized) - ); - - free_deposit::, T::Currency>( - &existing_deposit_entry.deposit, - &existing_deposit_entry.reason, - )?; - Self::deposit_event(Event::::DepositReclaimed(existing_deposit_entry.clone())); - *deposit_entry = None; - Ok(()) - } - })?; - Ok(()) + Self::remove_deposit(namespace, key, Some(dispatcher)) } } @@ -136,5 +117,32 @@ pub mod pallet { })?; Ok(()) } + + pub fn remove_deposit( + namespace: Namespace, + key: DepositKeyOf, + expected_owner: Option>, + ) -> DispatchResult { + Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { + None => Err(DispatchError::from(Error::::DepositNotFound)), + Some(ref existing_deposit_entry) => { + if let Some(expected_owner) = expected_owner { + ensure!( + existing_deposit_entry.deposit.owner == expected_owner, + DispatchError::from(Error::::Unauthorized) + ); + }; + + free_deposit::, T::Currency>( + &existing_deposit_entry.deposit, + &existing_deposit_entry.reason, + )?; + Self::deposit_event(Event::::DepositReclaimed(existing_deposit_entry.clone())); + *deposit_entry = None; + Ok(()) + } + })?; + Ok(()) + } } } From 841a138052d37a3307583d04deaa1646c23b5e71 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 12:45:50 +0100 Subject: [PATCH 13/46] Cleanups --- dip-template/runtimes/dip-provider/src/dip.rs | 10 +++++-- pallets/pallet-deposit-storage/src/deposit.rs | 27 +++++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 16489c5fff..d201d15427 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -60,15 +60,21 @@ pub mod deposit { use sp_core::{ConstU128, ConstU32}; use sp_runtime::BoundedVec; + pub const NAMESPACE: [u8; 11] = *b"DipProvider"; + pub struct Namespace; impl Get>> for Namespace { fn get() -> BoundedVec> { - (*b"DipProvider").to_vec().try_into().expect("Should never fail.") + debug_assert!(NAMESPACE.len() <= MAX_NAMESPACE_LENGTH as usize, "Namespace is longer than the maximum namespace length configured in the pallet_deposit_storage pallet."); + NAMESPACE + .to_vec() + .try_into() + .expect("Namespace should never fail to be converted to a BoundedVec.") } } - pub const DEPOSIT_AMOUNT: Balance = 100 * UNIT; + pub const DEPOSIT_AMOUNT: Balance = 2 * UNIT; pub type DepositCollectorHooks = FixedDepositCollectorViaDepositsPallet>; diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index cd42f55725..5f482e7263 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -32,7 +32,7 @@ use scale_info::TypeInfo; use sp_runtime::traits::{Get, Hash}; use sp_std::marker::PhantomData; -use crate::{AccountIdOf, BalanceOf, Config, HoldReason, Pallet, MAX_NAMESPACE_LENGTH}; +use crate::{AccountIdOf, BalanceOf, Config, Error, HoldReason, Pallet, MAX_NAMESPACE_LENGTH}; #[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] pub struct DepositEntry { @@ -46,6 +46,24 @@ pub struct FixedDepositCollectorViaDepositsPallet, ); +pub enum FixedDepositCollectorViaDepositsPalletError { + DepositAlreadyTaken, + FailedToHold, + FailedToRelease, + Internal, +} + +impl From for u16 { + fn from(value: FixedDepositCollectorViaDepositsPalletError) -> Self { + match value { + FixedDepositCollectorViaDepositsPalletError::DepositAlreadyTaken => 0, + FixedDepositCollectorViaDepositsPalletError::FailedToHold => 1, + FixedDepositCollectorViaDepositsPalletError::FailedToRelease => 2, + FixedDepositCollectorViaDepositsPalletError::Internal => u16::MAX, + } + } +} + impl ProviderHooks for FixedDepositCollectorViaDepositsPallet where @@ -74,7 +92,12 @@ where }, reason: HoldReason::Deposit.into(), }; - Pallet::::add_deposit(namespace, key_hash, deposit_entry).map_err(|_| 1u16)?; + Pallet::::add_deposit(namespace, key_hash, deposit_entry).map_err(|e| match e { + pallet_error if pallet_error == DispatchError::from(Error::::DepositExisting) => { + FixedDepositCollectorViaDepositsPalletError::DepositAlreadyTaken + } + _ => FixedDepositCollectorViaDepositsPalletError::Internal, + })?; Ok(()) } From b3057695a76257da9f7c81a3828b4ac0bd4a520a Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 13:26:12 +0100 Subject: [PATCH 14/46] Half-way through deposit reclaiming hooks --- Cargo.lock | 1 + dip-template/runtimes/dip-provider/src/dip.rs | 12 ++++++- pallets/pallet-deposit-storage/Cargo.toml | 3 ++ pallets/pallet-deposit-storage/src/deposit.rs | 24 +++++++++----- pallets/pallet-deposit-storage/src/lib.rs | 28 ++++++++++------ pallets/pallet-deposit-storage/src/traits.rs | 33 +++++++++++++++++++ 6 files changed, 82 insertions(+), 19 deletions(-) create mode 100644 pallets/pallet-deposit-storage/src/traits.rs diff --git a/Cargo.lock b/Cargo.lock index 4c6d6c465e..abcc85ce85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6452,6 +6452,7 @@ dependencies = [ "frame-support", "frame-system", "kilt-support", + "log", "pallet-dip-provider", "parity-scale-codec", "scale-info", diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index d201d15427..1a8518d512 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -56,7 +56,7 @@ pub mod deposit { use crate::{Balance, UNIT}; use frame_support::traits::Get; - use pallet_deposit_storage::{FixedDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH}; + use pallet_deposit_storage::{FixedDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH, traits::DepositStorageHooks}; use sp_core::{ConstU128, ConstU32}; use sp_runtime::BoundedVec; @@ -78,11 +78,21 @@ pub mod deposit { pub type DepositCollectorHooks = FixedDepositCollectorViaDepositsPallet>; + + pub struct CommitmentDepositRemovalHook; + + impl DepositStorageHooks for CommitmentDepositRemovalHook { + fn on_deposit_reclaimed(namespace: &pallet_deposit_storage::Namespace, key: &pallet_deposit_storage::DepositKey) -> Result<(), sp_runtime::DispatchError> { + // TODO: Resume from here + let (submitter, commitment_version) = <(AccountId, IdentityCommitmentVersion)>::decode(&mut key) + } + } } impl pallet_deposit_storage::Config for Runtime { type CheckOrigin = EnsureSigned; type Currency = Balances; + type DepositHooks = ; type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; } diff --git a/pallets/pallet-deposit-storage/Cargo.toml b/pallets/pallet-deposit-storage/Cargo.toml index f0f012d72f..914806a69e 100644 --- a/pallets/pallet-deposit-storage/Cargo.toml +++ b/pallets/pallet-deposit-storage/Cargo.toml @@ -24,6 +24,8 @@ scale-info = {workspace = true, features = ["derive"]} sp-runtime.workspace = true sp-std.workspace = true +log.workspace = true + [features] default = ["std"] std = [ @@ -35,4 +37,5 @@ std = [ "scale-info/std", "sp-runtime/std", "sp-std/std", + "log/std", ] diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index 5f482e7263..9637588cbd 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -29,10 +29,10 @@ use kilt_support::Deposit; use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; -use sp_runtime::traits::{Get, Hash}; +use sp_runtime::traits::Get; use sp_std::marker::PhantomData; -use crate::{AccountIdOf, BalanceOf, Config, Error, HoldReason, Pallet, MAX_NAMESPACE_LENGTH}; +use crate::{AccountIdOf, BalanceOf, Config, Error, HoldReason, Pallet, MAX_KEY_LENGTH, MAX_NAMESPACE_LENGTH}; #[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] pub struct DepositEntry { @@ -40,8 +40,6 @@ pub struct DepositEntry { pub(crate) reason: Reason, } -type HasherOf = ::Hashing; - pub struct FixedDepositCollectorViaDepositsPallet( PhantomData<(Runtime, DepositsNamespace, FixedDepositAmount)>, ); @@ -84,7 +82,12 @@ where version: IdentityCommitmentVersion, ) -> Result { let namespace = DepositsNamespace::get(); - let key_hash = HasherOf::::hash((submitter, version).encode().as_ref()); + let key = (submitter, version).encode().try_into().map_err(|_| { + log::error!( + "Failed to convert tuple ({submitter}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}" + ); + FixedDepositCollectorViaDepositsPalletError::Internal + })?; let deposit_entry = DepositEntry { deposit: Deposit { amount: FixedDepositAmount::get(), @@ -92,7 +95,7 @@ where }, reason: HoldReason::Deposit.into(), }; - Pallet::::add_deposit(namespace, key_hash, deposit_entry).map_err(|e| match e { + Pallet::::add_deposit(namespace, key, deposit_entry).map_err(|e| match e { pallet_error if pallet_error == DispatchError::from(Error::::DepositExisting) => { FixedDepositCollectorViaDepositsPalletError::DepositAlreadyTaken } @@ -108,8 +111,13 @@ where version: pallet_dip_provider::IdentityCommitmentVersion, ) -> Result { let namespace = DepositsNamespace::get(); - let key_hash = HasherOf::::hash((submitter, version).encode().as_ref()); - Pallet::::remove_deposit(namespace, key_hash, None).map_err(|_| 2u16)?; + let key = (submitter, version).encode().try_into().map_err(|_| { + log::error!( + "Failed to convert tuple ({submitter}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}" + ); + FixedDepositCollectorViaDepositsPalletError::Internal + })?; + Pallet::::remove_deposit(&namespace, &key, None).map_err(|_| 2u16)?; Ok(()) } } diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 8acec6625d..ccba7c5362 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -20,13 +20,17 @@ #![recursion_limit = "256"] mod deposit; +pub mod traits; pub use deposit::FixedDepositCollectorViaDepositsPallet; pub use pallet::*; #[frame_support::pallet(dev_mode)] pub mod pallet { - use crate::deposit::{free_deposit, reserve_deposit, DepositEntry}; + use crate::{ + deposit::{free_deposit, reserve_deposit, DepositEntry}, + traits::DepositStorageHooks, + }; use super::*; @@ -44,10 +48,11 @@ pub mod pallet { /// The current storage version. const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); pub const MAX_NAMESPACE_LENGTH: u32 = 16; + pub const MAX_KEY_LENGTH: u32 = 256; pub type AccountIdOf = ::AccountId; pub type BalanceOf = <::Currency as Inspect>>::Balance; - pub type DepositKeyOf = ::Hash; + pub type DepositKey = BoundedVec>; pub type DepositEntryOf = DepositEntry, BalanceOf, ::RuntimeHoldReason>; pub type Namespace = BoundedVec>; @@ -55,6 +60,7 @@ pub mod pallet { pub trait Config: frame_system::Config { type CheckOrigin: EnsureOrigin; type Currency: Mutate; + type DepositHooks: DepositStorageHooks; type RuntimeEvent: From> + IsType<::RuntimeEvent>; type RuntimeHoldReason: From + Clone + PartialEq + Debug + FullCodec + MaxEncodedLen + TypeInfo; } @@ -82,7 +88,7 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn deposits)] pub(crate) type Deposits = - StorageDoubleMap<_, Twox64Concat, Namespace, Twox64Concat, DepositKeyOf, DepositEntryOf>; + StorageDoubleMap<_, Twox64Concat, Namespace, Twox64Concat, DepositKey, DepositEntryOf>; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -93,15 +99,17 @@ pub mod pallet { #[pallet::call_index(0)] // TODO: Update weight #[pallet::weight(0)] - pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKeyOf) -> DispatchResult { + pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKey) -> DispatchResult { let dispatcher = T::CheckOrigin::ensure_origin(origin)?; - Self::remove_deposit(namespace, key, Some(dispatcher)) + Self::remove_deposit(&namespace, &key, Some(&dispatcher))?; + T::DepositHooks::on_deposit_reclaimed(&namespace, &key)?; + Ok(()) } } impl Pallet { - pub fn add_deposit(namespace: Namespace, key: DepositKeyOf, entry: DepositEntryOf) -> DispatchResult { + pub fn add_deposit(namespace: Namespace, key: DepositKey, entry: DepositEntryOf) -> DispatchResult { Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { Some(_) => Err(DispatchError::from(Error::::DepositExisting)), None => { @@ -119,16 +127,16 @@ pub mod pallet { } pub fn remove_deposit( - namespace: Namespace, - key: DepositKeyOf, - expected_owner: Option>, + namespace: &Namespace, + key: &DepositKey, + expected_owner: Option<&AccountIdOf>, ) -> DispatchResult { Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { None => Err(DispatchError::from(Error::::DepositNotFound)), Some(ref existing_deposit_entry) => { if let Some(expected_owner) = expected_owner { ensure!( - existing_deposit_entry.deposit.owner == expected_owner, + existing_deposit_entry.deposit.owner == *expected_owner, DispatchError::from(Error::::Unauthorized) ); }; diff --git a/pallets/pallet-deposit-storage/src/traits.rs b/pallets/pallet-deposit-storage/src/traits.rs new file mode 100644 index 0000000000..281bc1bd59 --- /dev/null +++ b/pallets/pallet-deposit-storage/src/traits.rs @@ -0,0 +1,33 @@ +// KILT Blockchain – https://botlabs.org +// Copyright (C) 2019-2023 BOTLabs GmbH + +// The KILT Blockchain is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// The KILT Blockchain is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// If you feel like getting in touch with us, you can do so at info@botlabs.org + +use sp_runtime::DispatchError; + +use crate::{DepositKey, Namespace}; + +pub trait DepositStorageHooks { + fn on_deposit_reclaimed(namespace: &Namespace, key: &DepositKey) -> Result<(), DispatchError>; +} + +pub struct NoopDepositStorageHooks; + +impl DepositStorageHooks for NoopDepositStorageHooks { + fn on_deposit_reclaimed(_namespace: &Namespace, _key: &DepositKey) -> Result<(), DispatchError> { + Ok(()) + } +} From 16f4a6f2719f04d6c070a91e7d846d68de4b9184 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 15:38:23 +0100 Subject: [PATCH 15/46] Compiling --- dip-template/runtimes/dip-provider/src/dip.rs | 51 ++++++++++++++++--- pallets/pallet-deposit-storage/src/deposit.rs | 6 ++- pallets/pallet-deposit-storage/src/lib.rs | 41 +++++++-------- pallets/pallet-deposit-storage/src/traits.rs | 32 +++++++++--- pallets/pallet-dip-provider/src/lib.rs | 37 +++++++------- 5 files changed, 107 insertions(+), 60 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 1a8518d512..49e56febbe 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -28,7 +28,10 @@ use runtime_common::dip::{ use scale_info::TypeInfo; use sp_std::vec::Vec; -use crate::{AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason}; +use crate::{ + deposit::CommitmentDepositRemovalHook, AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, + RuntimeHoldReason, +}; pub mod runtime_api { use super::*; @@ -56,7 +59,9 @@ pub mod deposit { use crate::{Balance, UNIT}; use frame_support::traits::Get; - use pallet_deposit_storage::{FixedDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH, traits::DepositStorageHooks}; + use pallet_deposit_storage::{ + traits::DepositStorageHooks, DepositEntryOf, FixedDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH, + }; use sp_core::{ConstU128, ConstU32}; use sp_runtime::BoundedVec; @@ -79,12 +84,44 @@ pub mod deposit { pub type DepositCollectorHooks = FixedDepositCollectorViaDepositsPallet>; + pub enum CommitmentDepositRemovalHookError { + DecodeKey, + Internal, + } + + impl From for u16 { + fn from(value: CommitmentDepositRemovalHookError) -> Self { + match value { + CommitmentDepositRemovalHookError::DecodeKey => 0, + CommitmentDepositRemovalHookError::Internal => u16::MAX, + } + } + } + pub struct CommitmentDepositRemovalHook; - impl DepositStorageHooks for CommitmentDepositRemovalHook { - fn on_deposit_reclaimed(namespace: &pallet_deposit_storage::Namespace, key: &pallet_deposit_storage::DepositKey) -> Result<(), sp_runtime::DispatchError> { - // TODO: Resume from here - let (submitter, commitment_version) = <(AccountId, IdentityCommitmentVersion)>::decode(&mut key) + impl DepositStorageHooks for CommitmentDepositRemovalHook { + type Error = CommitmentDepositRemovalHookError; + + fn on_deposit_reclaimed( + _namespace: &pallet_deposit_storage::Namespace, + key: &pallet_deposit_storage::DepositKey, + _deposit: DepositEntryOf, + ) -> Result<(), Self::Error> { + let (identifier, commitment_version) = <(DidIdentifier, IdentityCommitmentVersion)>::decode(&mut &key[..]) + .map_err(|_| CommitmentDepositRemovalHookError::DecodeKey)?; + pallet_dip_provider::Pallet::::delete_identity_commitment_storage_entry( + &identifier, + commitment_version, + ) + .map_err(|_| { + log::error!( + "Should not fail to remove commitment for identifier {:#?} and version {commitment_version}", + identifier + ); + CommitmentDepositRemovalHookError::Internal + })?; + Ok(()) } } } @@ -92,7 +129,7 @@ pub mod deposit { impl pallet_deposit_storage::Config for Runtime { type CheckOrigin = EnsureSigned; type Currency = Balances; - type DepositHooks = ; + type DepositHooks = CommitmentDepositRemovalHook; type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; } diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index 9637588cbd..b043e1ad57 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -84,7 +84,8 @@ where let namespace = DepositsNamespace::get(); let key = (submitter, version).encode().try_into().map_err(|_| { log::error!( - "Failed to convert tuple ({submitter}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}" + "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}", + submitter, ); FixedDepositCollectorViaDepositsPalletError::Internal })?; @@ -113,7 +114,8 @@ where let namespace = DepositsNamespace::get(); let key = (submitter, version).encode().try_into().map_err(|_| { log::error!( - "Failed to convert tuple ({submitter}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}" + "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}", + submitter ); FixedDepositCollectorViaDepositsPalletError::Internal })?; diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index ccba7c5362..9784931c4f 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -43,6 +43,7 @@ pub mod pallet { }; use frame_system::pallet_prelude::*; use parity_scale_codec::FullCodec; + use sp_runtime::DispatchError; use sp_std::fmt::Debug; /// The current storage version. @@ -60,7 +61,7 @@ pub mod pallet { pub trait Config: frame_system::Config { type CheckOrigin: EnsureOrigin; type Currency: Mutate; - type DepositHooks: DepositStorageHooks; + type DepositHooks: DepositStorageHooks; type RuntimeEvent: From> + IsType<::RuntimeEvent>; type RuntimeHoldReason: From + Clone + PartialEq + Debug + FullCodec + MaxEncodedLen + TypeInfo; } @@ -75,6 +76,7 @@ pub mod pallet { DepositNotFound, DepositExisting, Unauthorized, + HookError(u16), } #[pallet::event] @@ -102,8 +104,9 @@ pub mod pallet { pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKey) -> DispatchResult { let dispatcher = T::CheckOrigin::ensure_origin(origin)?; - Self::remove_deposit(&namespace, &key, Some(&dispatcher))?; - T::DepositHooks::on_deposit_reclaimed(&namespace, &key)?; + let deposit = Self::remove_deposit(&namespace, &key, Some(&dispatcher))?; + T::DepositHooks::on_deposit_reclaimed(&namespace, &key, deposit) + .map_err(|e| Error::::HookError(e.into()))?; Ok(()) } } @@ -130,27 +133,17 @@ pub mod pallet { namespace: &Namespace, key: &DepositKey, expected_owner: Option<&AccountIdOf>, - ) -> DispatchResult { - Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { - None => Err(DispatchError::from(Error::::DepositNotFound)), - Some(ref existing_deposit_entry) => { - if let Some(expected_owner) = expected_owner { - ensure!( - existing_deposit_entry.deposit.owner == *expected_owner, - DispatchError::from(Error::::Unauthorized) - ); - }; - - free_deposit::, T::Currency>( - &existing_deposit_entry.deposit, - &existing_deposit_entry.reason, - )?; - Self::deposit_event(Event::::DepositReclaimed(existing_deposit_entry.clone())); - *deposit_entry = None; - Ok(()) - } - })?; - Ok(()) + ) -> Result, DispatchError> { + let existing_entry = Deposits::::take(namespace, key).ok_or(Error::::DepositNotFound)?; + if let Some(expected_owner) = expected_owner { + ensure!( + existing_entry.deposit.owner == *expected_owner, + Error::::Unauthorized + ); + } + free_deposit::, T::Currency>(&existing_entry.deposit, &existing_entry.reason)?; + Self::deposit_event(Event::::DepositReclaimed(existing_entry.clone())); + Ok(existing_entry) } } } diff --git a/pallets/pallet-deposit-storage/src/traits.rs b/pallets/pallet-deposit-storage/src/traits.rs index 281bc1bd59..54d7717da6 100644 --- a/pallets/pallet-deposit-storage/src/traits.rs +++ b/pallets/pallet-deposit-storage/src/traits.rs @@ -16,18 +16,36 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use sp_runtime::DispatchError; +use sp_std::marker::PhantomData; -use crate::{DepositKey, Namespace}; +use crate::{Config, DepositEntryOf, DepositKey, Namespace}; -pub trait DepositStorageHooks { - fn on_deposit_reclaimed(namespace: &Namespace, key: &DepositKey) -> Result<(), DispatchError>; +pub trait DepositStorageHooks +where + Runtime: Config, +{ + type Error: Into; + + fn on_deposit_reclaimed( + namespace: &Namespace, + key: &DepositKey, + deposit: DepositEntryOf, + ) -> Result<(), Self::Error>; } -pub struct NoopDepositStorageHooks; +pub struct NoopDepositStorageHooks(PhantomData); + +impl DepositStorageHooks for NoopDepositStorageHooks +where + Runtime: Config, +{ + type Error = u16; -impl DepositStorageHooks for NoopDepositStorageHooks { - fn on_deposit_reclaimed(_namespace: &Namespace, _key: &DepositKey) -> Result<(), DispatchError> { + fn on_deposit_reclaimed( + _namespace: &Namespace, + _key: &DepositKey, + _deposit: DepositEntryOf, + ) -> Result<(), Self::Error> { Ok(()) } } diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 113367b4b7..1bbfc842b1 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -168,27 +168,24 @@ pub mod pallet { T::CommitOriginCheck::ensure_origin(origin).map(|e: ::CommitOrigin| e.submitter())?; let commitment_version = version.unwrap_or(LATEST_COMMITMENT_VERSION); - IdentityCommitments::::try_mutate(&identifier, commitment_version, |commitment_entry| { - match commitment_entry { - None => Err(Error::::IdentityNotFound), - Some(commitment) => { - T::ProviderHooks::on_commitment_removed( - &identifier, - &dispatcher, - commitment, - commitment_version, - ) - .map_err(|e| Error::::HookError(e.into()))?; - *commitment_entry = None; - Self::deposit_event(Event::::VersionedIdentityDeleted { - identifier: identifier.clone(), - version: commitment_version, - }); - Ok(()) - } - } - })?; + let commitment = Self::delete_identity_commitment_storage_entry(&identifier, commitment_version)?; + T::ProviderHooks::on_commitment_removed(&identifier, &dispatcher, &commitment, commitment_version) + .map_err(|e| Error::::HookError(e.into()))?; Ok(()) } } + + impl Pallet { + pub fn delete_identity_commitment_storage_entry( + identifier: &T::Identifier, + version: IdentityCommitmentVersion, + ) -> Result { + let commitment = IdentityCommitments::::take(identifier, version).ok_or(Error::::IdentityNotFound)?; + Self::deposit_event(Event::::VersionedIdentityDeleted { + identifier: identifier.clone(), + version, + }); + Ok(commitment) + } + } } From 68d6053c7566618fa4d16e130d72ddf4f407fcd0 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 16:12:35 +0100 Subject: [PATCH 16/46] Cleanup --- dip-template/runtimes/dip-provider/src/dip.rs | 12 ++-- pallets/pallet-deposit-storage/src/deposit.rs | 30 +++++----- pallets/pallet-deposit-storage/src/traits.rs | 6 +- pallets/pallet-dip-provider/src/lib.rs | 14 ++--- pallets/pallet-dip-provider/src/traits.rs | 58 +++++++++---------- 5 files changed, 53 insertions(+), 67 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 49e56febbe..4a280d975a 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -29,8 +29,7 @@ use scale_info::TypeInfo; use sp_std::vec::Vec; use crate::{ - deposit::CommitmentDepositRemovalHook, AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, - RuntimeHoldReason, + deposit::DepositHooks, AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason, }; pub mod runtime_api { @@ -81,8 +80,7 @@ pub mod deposit { pub const DEPOSIT_AMOUNT: Balance = 2 * UNIT; - pub type DepositCollectorHooks = - FixedDepositCollectorViaDepositsPallet>; + pub type DepositCollectorHooks = FixedDepositCollectorViaDepositsPallet>; pub enum CommitmentDepositRemovalHookError { DecodeKey, @@ -98,9 +96,9 @@ pub mod deposit { } } - pub struct CommitmentDepositRemovalHook; + pub struct DepositHooks; - impl DepositStorageHooks for CommitmentDepositRemovalHook { + impl DepositStorageHooks for DepositHooks { type Error = CommitmentDepositRemovalHookError; fn on_deposit_reclaimed( @@ -129,7 +127,7 @@ pub mod deposit { impl pallet_deposit_storage::Config for Runtime { type CheckOrigin = EnsureSigned; type Currency = Balances; - type DepositHooks = CommitmentDepositRemovalHook; + type DepositHooks = DepositHooks; type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; } diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index b043e1ad57..3fc4c375d8 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -32,7 +32,7 @@ use scale_info::TypeInfo; use sp_runtime::traits::Get; use sp_std::marker::PhantomData; -use crate::{AccountIdOf, BalanceOf, Config, Error, HoldReason, Pallet, MAX_KEY_LENGTH, MAX_NAMESPACE_LENGTH}; +use crate::{BalanceOf, Config, Error, HoldReason, Pallet, MAX_KEY_LENGTH, MAX_NAMESPACE_LENGTH}; #[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] pub struct DepositEntry { @@ -40,8 +40,8 @@ pub struct DepositEntry { pub(crate) reason: Reason, } -pub struct FixedDepositCollectorViaDepositsPallet( - PhantomData<(Runtime, DepositsNamespace, FixedDepositAmount)>, +pub struct FixedDepositCollectorViaDepositsPallet( + PhantomData<(DepositsNamespace, FixedDepositAmount)>, ); pub enum FixedDepositCollectorViaDepositsPalletError { @@ -62,25 +62,21 @@ impl From for u16 { } } -impl ProviderHooks - for FixedDepositCollectorViaDepositsPallet +impl ProviderHooks + for FixedDepositCollectorViaDepositsPallet where Runtime: pallet_dip_provider::Config + Config, DepositsNamespace: Get>>, FixedDepositAmount: Get>, { type Error = u16; - type Identifier = Runtime::Identifier; - type IdentityCommitment = Runtime::IdentityCommitment; - type Submitter = AccountIdOf; - type Success = (); fn on_identity_committed( - _identifier: &Self::Identifier, - submitter: &Self::Submitter, - _commitment: &Self::IdentityCommitment, + _identifier: &Runtime::Identifier, + submitter: &Runtime::AccountId, + _commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, - ) -> Result { + ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); let key = (submitter, version).encode().try_into().map_err(|_| { log::error!( @@ -106,11 +102,11 @@ where } fn on_commitment_removed( - _identifier: &Self::Identifier, - submitter: &Self::Submitter, - _commitment: &Self::IdentityCommitment, + _identifier: &Runtime::Identifier, + submitter: &Runtime::AccountId, + _commitment: &Runtime::IdentityCommitment, version: pallet_dip_provider::IdentityCommitmentVersion, - ) -> Result { + ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); let key = (submitter, version).encode().try_into().map_err(|_| { log::error!( diff --git a/pallets/pallet-deposit-storage/src/traits.rs b/pallets/pallet-deposit-storage/src/traits.rs index 54d7717da6..2a4ec0b5b1 100644 --- a/pallets/pallet-deposit-storage/src/traits.rs +++ b/pallets/pallet-deposit-storage/src/traits.rs @@ -16,8 +16,6 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use sp_std::marker::PhantomData; - use crate::{Config, DepositEntryOf, DepositKey, Namespace}; pub trait DepositStorageHooks @@ -33,9 +31,9 @@ where ) -> Result<(), Self::Error>; } -pub struct NoopDepositStorageHooks(PhantomData); +pub struct NoopDepositStorageHooks; -impl DepositStorageHooks for NoopDepositStorageHooks +impl DepositStorageHooks for NoopDepositStorageHooks where Runtime: Config, { diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 1bbfc842b1..e9ec706d51 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -57,11 +57,7 @@ pub mod pallet { type IdentityCommitmentGeneratorError: Into; type IdentityProvider: IdentityProvider; type IdentityProviderError: Into; - type ProviderHooks: ProviderHooks< - Identifier = Self::Identifier, - Submitter = Self::AccountId, - IdentityCommitment = Self::IdentityCommitment, - >; + type ProviderHooks: ProviderHooks; type RuntimeEvent: From> + IsType<::RuntimeEvent>; } @@ -103,7 +99,7 @@ pub mod pallet { LimitTooLow, IdentityProvider(u16), IdentityCommitmentGenerator(u16), - HookError(u16), + Hook(u16), } #[pallet::call] @@ -137,14 +133,14 @@ pub mod pallet { old_commitment, commitment_version, ) - .map_err(|e| Error::::HookError(e.into()))?; + .map_err(|e| Error::::Hook(e.into()))?; Self::deposit_event(Event::::VersionedIdentityDeleted { identifier: identifier.clone(), version: commitment_version, }); } T::ProviderHooks::on_identity_committed(&identifier, &dispatcher, &commitment, commitment_version) - .map_err(|e| Error::::HookError(e.into()))?; + .map_err(|e| Error::::Hook(e.into()))?; *commitment_entry = Some(commitment.clone()); Self::deposit_event(Event::::IdentityCommitted { identifier: identifier.clone(), @@ -170,7 +166,7 @@ pub mod pallet { let commitment_version = version.unwrap_or(LATEST_COMMITMENT_VERSION); let commitment = Self::delete_identity_commitment_storage_entry(&identifier, commitment_version)?; T::ProviderHooks::on_commitment_removed(&identifier, &dispatcher, &commitment, commitment_version) - .map_err(|e| Error::::HookError(e.into()))?; + .map_err(|e| Error::::Hook(e.into()))?; Ok(()) } } diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index b8d555407a..52785c8ad0 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -17,9 +17,9 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org use did::DidRawOrigin; -use sp_std::marker::PhantomData; +use frame_support::sp_runtime::AccountId32; -use crate::IdentityCommitmentVersion; +use crate::{Config, IdentityCommitmentVersion}; pub use identity_generation::*; pub mod identity_generation { @@ -105,7 +105,7 @@ pub trait SubmitterInfo { fn submitter(&self) -> Self::Submitter; } -impl SubmitterInfo for frame_support::sp_runtime::AccountId32 { +impl SubmitterInfo for AccountId32 { type Submitter = Self; fn submitter(&self) -> Self::Submitter { @@ -124,52 +124,50 @@ where } } -pub trait ProviderHooks { - type Identifier; - type IdentityCommitment; +pub trait ProviderHooks +where + Runtime: Config, +{ type Error: Into; - type Submitter; - type Success; fn on_identity_committed( - identifier: &Self::Identifier, - submitter: &Self::Submitter, - commitment: &Self::IdentityCommitment, + identifier: &Runtime::Identifier, + submitter: &Runtime::AccountId, + commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, - ) -> Result; + ) -> Result<(), Self::Error>; fn on_commitment_removed( - identifier: &Self::Identifier, - submitter: &Self::Submitter, - commitment: &Self::IdentityCommitment, + identifier: &Runtime::Identifier, + submitter: &Runtime::AccountId, + commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, - ) -> Result; + ) -> Result<(), Self::Error>; } -pub struct NoopHooks(PhantomData<(Identifier, Commitment, Submitter)>); +pub struct NoopHooks; -impl ProviderHooks for NoopHooks { +impl ProviderHooks for NoopHooks +where + Runtime: Config, +{ type Error = u16; - type Identifier = Identifier; - type IdentityCommitment = Commitment; - type Submitter = Submitter; - type Success = (); fn on_commitment_removed( - _identifier: &Self::Identifier, - _submitter: &Self::Submitter, - _commitment: &Self::IdentityCommitment, + _identifier: &Runtime::Identifier, + _submitter: &Runtime::AccountId, + _commitment: &Runtime::IdentityCommitment, _version: IdentityCommitmentVersion, - ) -> Result { + ) -> Result<(), Self::Error> { Ok(()) } fn on_identity_committed( - _identifier: &Self::Identifier, - _submitter: &Self::Submitter, - _commitment: &Self::IdentityCommitment, + _identifier: &Runtime::Identifier, + _submitter: &Runtime::AccountId, + _commitment: &Runtime::IdentityCommitment, _version: IdentityCommitmentVersion, - ) -> Result { + ) -> Result<(), Self::Error> { Ok(()) } } From 66cbcbc8175cc6eb7d283cdf9273fe643951b3dc Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Fri, 3 Nov 2023 18:00:11 +0100 Subject: [PATCH 17/46] Make limits configurable by the runtime --- dip-template/runtimes/dip-provider/src/dip.rs | 17 ++--- pallets/pallet-deposit-storage/src/deposit.rs | 52 +++++++++++----- pallets/pallet-deposit-storage/src/lib.rs | 62 +++++++++++++------ pallets/pallet-deposit-storage/src/traits.rs | 10 +-- 4 files changed, 95 insertions(+), 46 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 4a280d975a..2086cd4176 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -26,6 +26,7 @@ use runtime_common::dip::{ merkle::{DidMerkleProofError, DidMerkleRootGenerator}, }; use scale_info::TypeInfo; +use sp_core::ConstU32; use sp_std::vec::Vec; use crate::{ @@ -59,18 +60,18 @@ pub mod deposit { use frame_support::traits::Get; use pallet_deposit_storage::{ - traits::DepositStorageHooks, DepositEntryOf, FixedDepositCollectorViaDepositsPallet, MAX_NAMESPACE_LENGTH, + traits::DepositStorageHooks, DepositEntryOf, DepositKeyOf, FixedDepositCollectorViaDepositsPallet, NamespaceOf, }; - use sp_core::{ConstU128, ConstU32}; + use sp_core::ConstU128; use sp_runtime::BoundedVec; pub const NAMESPACE: [u8; 11] = *b"DipProvider"; pub struct Namespace; - impl Get>> for Namespace { - fn get() -> BoundedVec> { - debug_assert!(NAMESPACE.len() <= MAX_NAMESPACE_LENGTH as usize, "Namespace is longer than the maximum namespace length configured in the pallet_deposit_storage pallet."); + impl Get::MaxNamespaceLength>> for Namespace { + fn get() -> BoundedVec::MaxNamespaceLength> { + debug_assert!(NAMESPACE.len() as u32 <= ::MaxNamespaceLength::get(), "Namespace is longer than the maximum namespace length configured in the pallet_deposit_storage pallet."); NAMESPACE .to_vec() .try_into() @@ -102,8 +103,8 @@ pub mod deposit { type Error = CommitmentDepositRemovalHookError; fn on_deposit_reclaimed( - _namespace: &pallet_deposit_storage::Namespace, - key: &pallet_deposit_storage::DepositKey, + _namespace: &NamespaceOf, + key: &DepositKeyOf, _deposit: DepositEntryOf, ) -> Result<(), Self::Error> { let (identifier, commitment_version) = <(DidIdentifier, IdentityCommitmentVersion)>::decode(&mut &key[..]) @@ -128,6 +129,8 @@ impl pallet_deposit_storage::Config for Runtime { type CheckOrigin = EnsureSigned; type Currency = Balances; type DepositHooks = DepositHooks; + type MaxKeyLength = ConstU32<256>; + type MaxNamespaceLength = ConstU32<32>; type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; } diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index 3fc4c375d8..f9a48afefc 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -21,7 +21,6 @@ use frame_support::{ traits::{ fungible::{hold::Mutate, Inspect}, tokens::Precision, - ConstU32, }, BoundedVec, }; @@ -32,7 +31,7 @@ use scale_info::TypeInfo; use sp_runtime::traits::Get; use sp_std::marker::PhantomData; -use crate::{BalanceOf, Config, Error, HoldReason, Pallet, MAX_KEY_LENGTH, MAX_NAMESPACE_LENGTH}; +use crate::{BalanceOf, Config, Error, HoldReason, Pallet}; #[derive(Clone, Debug, Encode, Decode, Eq, PartialEq, Ord, PartialOrd, TypeInfo, MaxEncodedLen)] pub struct DepositEntry { @@ -46,6 +45,7 @@ pub struct FixedDepositCollectorViaDepositsPallet for u16 { fn from(value: FixedDepositCollectorViaDepositsPalletError) -> Self { match value { FixedDepositCollectorViaDepositsPalletError::DepositAlreadyTaken => 0, - FixedDepositCollectorViaDepositsPalletError::FailedToHold => 1, - FixedDepositCollectorViaDepositsPalletError::FailedToRelease => 2, + FixedDepositCollectorViaDepositsPalletError::DepositNotFound => 1, + FixedDepositCollectorViaDepositsPalletError::FailedToHold => 2, + FixedDepositCollectorViaDepositsPalletError::FailedToRelease => 3, FixedDepositCollectorViaDepositsPalletError::Internal => u16::MAX, } } @@ -66,22 +67,23 @@ impl ProviderHooks for FixedDepositCollectorViaDepositsPallet where Runtime: pallet_dip_provider::Config + Config, - DepositsNamespace: Get>>, + DepositsNamespace: Get>, FixedDepositAmount: Get>, { type Error = u16; fn on_identity_committed( - _identifier: &Runtime::Identifier, + identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, _commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); - let key = (submitter, version).encode().try_into().map_err(|_| { + let key = (identifier, version).encode().try_into().map_err(|_| { log::error!( - "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}", - submitter, + "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {}", + identifier, + Runtime::MaxNamespaceLength::get() ); FixedDepositCollectorViaDepositsPalletError::Internal })?; @@ -96,26 +98,44 @@ where pallet_error if pallet_error == DispatchError::from(Error::::DepositExisting) => { FixedDepositCollectorViaDepositsPalletError::DepositAlreadyTaken } - _ => FixedDepositCollectorViaDepositsPalletError::Internal, + _ => { + log::error!( + "Error {:#?} should not be generated inside `on_identity_committed` hook.", + e + ); + FixedDepositCollectorViaDepositsPalletError::Internal + } })?; Ok(()) } fn on_commitment_removed( - _identifier: &Runtime::Identifier, - submitter: &Runtime::AccountId, + identifier: &Runtime::Identifier, + _submitter: &Runtime::AccountId, _commitment: &Runtime::IdentityCommitment, version: pallet_dip_provider::IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); - let key = (submitter, version).encode().try_into().map_err(|_| { + let key = (identifier, version).encode().try_into().map_err(|_| { log::error!( - "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {MAX_KEY_LENGTH}", - submitter + "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {}", + identifier, + Runtime::MaxKeyLength::get() ); FixedDepositCollectorViaDepositsPalletError::Internal })?; - Pallet::::remove_deposit(&namespace, &key, None).map_err(|_| 2u16)?; + Pallet::::remove_deposit(&namespace, &key, None).map_err(|e| match e { + pallet_error if pallet_error == DispatchError::from(Error::::DepositNotFound) => { + FixedDepositCollectorViaDepositsPalletError::DepositNotFound + } + _ => { + log::error!( + "Error {:#?} should not be generated inside `on_commitment_removed` hook.", + e + ); + FixedDepositCollectorViaDepositsPalletError::Internal + } + })?; Ok(()) } } diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 9784931c4f..7abb1071e6 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -38,7 +38,7 @@ pub mod pallet { pallet_prelude::*, traits::{ fungible::{hold::Mutate, Inspect}, - ConstU32, EnsureOrigin, + EnsureOrigin, }, }; use frame_system::pallet_prelude::*; @@ -48,17 +48,20 @@ pub mod pallet { /// The current storage version. const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); - pub const MAX_NAMESPACE_LENGTH: u32 = 16; - pub const MAX_KEY_LENGTH: u32 = 256; pub type AccountIdOf = ::AccountId; pub type BalanceOf = <::Currency as Inspect>>::Balance; - pub type DepositKey = BoundedVec>; + pub type DepositKeyOf = BoundedVec::MaxKeyLength>; pub type DepositEntryOf = DepositEntry, BalanceOf, ::RuntimeHoldReason>; - pub type Namespace = BoundedVec>; + pub type NamespaceOf = BoundedVec::MaxNamespaceLength>; #[pallet::config] pub trait Config: frame_system::Config { + #[pallet::constant] + type MaxKeyLength: Get; + #[pallet::constant] + type MaxNamespaceLength: Get; + type CheckOrigin: EnsureOrigin; type Currency: Mutate; type DepositHooks: DepositStorageHooks; @@ -76,21 +79,29 @@ pub mod pallet { DepositNotFound, DepositExisting, Unauthorized, - HookError(u16), + Hook(u16), } #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { - DepositAdded(DepositEntryOf), - DepositReclaimed(DepositEntryOf), + DepositAdded { + namespace: NamespaceOf, + key: DepositKeyOf, + deposit_entry: DepositEntryOf, + }, + DepositReclaimed { + namespace: NamespaceOf, + key: DepositKeyOf, + deposit_entry: DepositEntryOf, + }, } // Double map (namespace, key) -> deposit #[pallet::storage] #[pallet::getter(fn deposits)] pub(crate) type Deposits = - StorageDoubleMap<_, Twox64Concat, Namespace, Twox64Concat, DepositKey, DepositEntryOf>; + StorageDoubleMap<_, Twox64Concat, NamespaceOf, Twox64Concat, DepositKeyOf, DepositEntryOf>; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -101,19 +112,26 @@ pub mod pallet { #[pallet::call_index(0)] // TODO: Update weight #[pallet::weight(0)] - pub fn reclaim_deposit(origin: OriginFor, namespace: Namespace, key: DepositKey) -> DispatchResult { + pub fn reclaim_deposit( + origin: OriginFor, + namespace: NamespaceOf, + key: DepositKeyOf, + ) -> DispatchResult { let dispatcher = T::CheckOrigin::ensure_origin(origin)?; let deposit = Self::remove_deposit(&namespace, &key, Some(&dispatcher))?; - T::DepositHooks::on_deposit_reclaimed(&namespace, &key, deposit) - .map_err(|e| Error::::HookError(e.into()))?; + T::DepositHooks::on_deposit_reclaimed(&namespace, &key, deposit).map_err(|e| Error::::Hook(e.into()))?; Ok(()) } } impl Pallet { - pub fn add_deposit(namespace: Namespace, key: DepositKey, entry: DepositEntryOf) -> DispatchResult { - Deposits::::try_mutate(namespace, key, |deposit_entry| match deposit_entry { + pub fn add_deposit( + namespace: NamespaceOf, + key: DepositKeyOf, + entry: DepositEntryOf, + ) -> DispatchResult { + Deposits::::try_mutate(&namespace, &key, |deposit_entry| match deposit_entry { Some(_) => Err(DispatchError::from(Error::::DepositExisting)), None => { reserve_deposit::, T::Currency>( @@ -121,7 +139,11 @@ pub mod pallet { entry.deposit.amount, &entry.reason, )?; - Self::deposit_event(Event::::DepositAdded(entry.clone())); + Self::deposit_event(Event::::DepositAdded { + namespace: namespace.clone(), + key: key.clone(), + deposit_entry: entry.clone(), + }); *deposit_entry = Some(entry); Ok(()) } @@ -130,8 +152,8 @@ pub mod pallet { } pub fn remove_deposit( - namespace: &Namespace, - key: &DepositKey, + namespace: &NamespaceOf, + key: &DepositKeyOf, expected_owner: Option<&AccountIdOf>, ) -> Result, DispatchError> { let existing_entry = Deposits::::take(namespace, key).ok_or(Error::::DepositNotFound)?; @@ -142,7 +164,11 @@ pub mod pallet { ); } free_deposit::, T::Currency>(&existing_entry.deposit, &existing_entry.reason)?; - Self::deposit_event(Event::::DepositReclaimed(existing_entry.clone())); + Self::deposit_event(Event::::DepositReclaimed { + namespace: namespace.clone(), + key: key.clone(), + deposit_entry: existing_entry.clone(), + }); Ok(existing_entry) } } diff --git a/pallets/pallet-deposit-storage/src/traits.rs b/pallets/pallet-deposit-storage/src/traits.rs index 2a4ec0b5b1..fb0b975bc4 100644 --- a/pallets/pallet-deposit-storage/src/traits.rs +++ b/pallets/pallet-deposit-storage/src/traits.rs @@ -16,7 +16,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use crate::{Config, DepositEntryOf, DepositKey, Namespace}; +use crate::{Config, DepositEntryOf, DepositKeyOf, NamespaceOf}; pub trait DepositStorageHooks where @@ -25,8 +25,8 @@ where type Error: Into; fn on_deposit_reclaimed( - namespace: &Namespace, - key: &DepositKey, + namespace: &NamespaceOf, + key: &DepositKeyOf, deposit: DepositEntryOf, ) -> Result<(), Self::Error>; } @@ -40,8 +40,8 @@ where type Error = u16; fn on_deposit_reclaimed( - _namespace: &Namespace, - _key: &DepositKey, + _namespace: &NamespaceOf, + _key: &DepositKeyOf, _deposit: DepositEntryOf, ) -> Result<(), Self::Error> { Ok(()) From 634c1c14fa43108dd3a585a666c199f7cf3a5aab Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Mon, 6 Nov 2023 09:32:46 +0100 Subject: [PATCH 18/46] Replace Namespace with configurable type --- pallets/pallet-deposit-storage/src/deposit.rs | 5 ++-- pallets/pallet-deposit-storage/src/lib.rs | 25 ++++++------------- pallets/pallet-deposit-storage/src/traits.rs | 6 ++--- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index f9a48afefc..c68e818297 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -22,7 +22,6 @@ use frame_support::{ fungible::{hold::Mutate, Inspect}, tokens::Precision, }, - BoundedVec, }; use kilt_support::Deposit; use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; @@ -67,7 +66,7 @@ impl ProviderHooks for FixedDepositCollectorViaDepositsPallet where Runtime: pallet_dip_provider::Config + Config, - DepositsNamespace: Get>, + DepositsNamespace: Get, FixedDepositAmount: Get>, { type Error = u16; @@ -83,7 +82,7 @@ where log::error!( "Failed to convert tuple ({:#?}, {version}) to BoundedVec with max length {}", identifier, - Runtime::MaxNamespaceLength::get() + Runtime::MaxKeyLength::get() ); FixedDepositCollectorViaDepositsPalletError::Internal })?; diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 7abb1071e6..2674923442 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -43,6 +43,7 @@ pub mod pallet { }; use frame_system::pallet_prelude::*; use parity_scale_codec::FullCodec; + use scale_info::TypeInfo; use sp_runtime::DispatchError; use sp_std::fmt::Debug; @@ -53,18 +54,16 @@ pub mod pallet { pub type BalanceOf = <::Currency as Inspect>>::Balance; pub type DepositKeyOf = BoundedVec::MaxKeyLength>; pub type DepositEntryOf = DepositEntry, BalanceOf, ::RuntimeHoldReason>; - pub type NamespaceOf = BoundedVec::MaxNamespaceLength>; #[pallet::config] pub trait Config: frame_system::Config { #[pallet::constant] type MaxKeyLength: Get; - #[pallet::constant] - type MaxNamespaceLength: Get; type CheckOrigin: EnsureOrigin; type Currency: Mutate; type DepositHooks: DepositStorageHooks; + type Namespace: Parameter; type RuntimeEvent: From> + IsType<::RuntimeEvent>; type RuntimeHoldReason: From + Clone + PartialEq + Debug + FullCodec + MaxEncodedLen + TypeInfo; } @@ -86,12 +85,12 @@ pub mod pallet { #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { DepositAdded { - namespace: NamespaceOf, + namespace: T::Namespace, key: DepositKeyOf, deposit_entry: DepositEntryOf, }, DepositReclaimed { - namespace: NamespaceOf, + namespace: T::Namespace, key: DepositKeyOf, deposit_entry: DepositEntryOf, }, @@ -101,7 +100,7 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn deposits)] pub(crate) type Deposits = - StorageDoubleMap<_, Twox64Concat, NamespaceOf, Twox64Concat, DepositKeyOf, DepositEntryOf>; + StorageDoubleMap<_, Twox64Concat, ::Namespace, Twox64Concat, DepositKeyOf, DepositEntryOf>; #[pallet::pallet] #[pallet::storage_version(STORAGE_VERSION)] @@ -112,11 +111,7 @@ pub mod pallet { #[pallet::call_index(0)] // TODO: Update weight #[pallet::weight(0)] - pub fn reclaim_deposit( - origin: OriginFor, - namespace: NamespaceOf, - key: DepositKeyOf, - ) -> DispatchResult { + pub fn reclaim_deposit(origin: OriginFor, namespace: T::Namespace, key: DepositKeyOf) -> DispatchResult { let dispatcher = T::CheckOrigin::ensure_origin(origin)?; let deposit = Self::remove_deposit(&namespace, &key, Some(&dispatcher))?; @@ -126,11 +121,7 @@ pub mod pallet { } impl Pallet { - pub fn add_deposit( - namespace: NamespaceOf, - key: DepositKeyOf, - entry: DepositEntryOf, - ) -> DispatchResult { + pub fn add_deposit(namespace: T::Namespace, key: DepositKeyOf, entry: DepositEntryOf) -> DispatchResult { Deposits::::try_mutate(&namespace, &key, |deposit_entry| match deposit_entry { Some(_) => Err(DispatchError::from(Error::::DepositExisting)), None => { @@ -152,7 +143,7 @@ pub mod pallet { } pub fn remove_deposit( - namespace: &NamespaceOf, + namespace: &T::Namespace, key: &DepositKeyOf, expected_owner: Option<&AccountIdOf>, ) -> Result, DispatchError> { diff --git a/pallets/pallet-deposit-storage/src/traits.rs b/pallets/pallet-deposit-storage/src/traits.rs index fb0b975bc4..f514eee108 100644 --- a/pallets/pallet-deposit-storage/src/traits.rs +++ b/pallets/pallet-deposit-storage/src/traits.rs @@ -16,7 +16,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use crate::{Config, DepositEntryOf, DepositKeyOf, NamespaceOf}; +use crate::{Config, DepositEntryOf, DepositKeyOf}; pub trait DepositStorageHooks where @@ -25,7 +25,7 @@ where type Error: Into; fn on_deposit_reclaimed( - namespace: &NamespaceOf, + namespace: &Runtime::Namespace, key: &DepositKeyOf, deposit: DepositEntryOf, ) -> Result<(), Self::Error>; @@ -40,7 +40,7 @@ where type Error = u16; fn on_deposit_reclaimed( - _namespace: &NamespaceOf, + _namespace: &Runtime::Namespace, _key: &DepositKeyOf, _deposit: DepositEntryOf, ) -> Result<(), Self::Error> { From 169c1ee65af85f218ccc15f52e7a1e8428f77fa8 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Mon, 6 Nov 2023 09:39:40 +0100 Subject: [PATCH 19/46] Fix provider runtime template --- dip-template/runtimes/dip-provider/src/dip.rs | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 2086cd4176..12ac28a33b 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -30,7 +30,8 @@ use sp_core::ConstU32; use sp_std::vec::Vec; use crate::{ - deposit::DepositHooks, AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason, + deposit::{DepositHooks, DepositNamespaces}, + AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason, }; pub mod runtime_api { @@ -60,28 +61,28 @@ pub mod deposit { use frame_support::traits::Get; use pallet_deposit_storage::{ - traits::DepositStorageHooks, DepositEntryOf, DepositKeyOf, FixedDepositCollectorViaDepositsPallet, NamespaceOf, + traits::DepositStorageHooks, DepositEntryOf, DepositKeyOf, FixedDepositCollectorViaDepositsPallet, }; - use sp_core::ConstU128; - use sp_runtime::BoundedVec; + use parity_scale_codec::MaxEncodedLen; + use sp_core::{ConstU128, RuntimeDebug}; - pub const NAMESPACE: [u8; 11] = *b"DipProvider"; + #[derive(Encode, Decode, MaxEncodedLen, TypeInfo, Clone, PartialEq, Eq, RuntimeDebug)] + pub enum DepositNamespaces { + DipProvider, + } - pub struct Namespace; + pub struct DipProviderDepositNamespace; - impl Get::MaxNamespaceLength>> for Namespace { - fn get() -> BoundedVec::MaxNamespaceLength> { - debug_assert!(NAMESPACE.len() as u32 <= ::MaxNamespaceLength::get(), "Namespace is longer than the maximum namespace length configured in the pallet_deposit_storage pallet."); - NAMESPACE - .to_vec() - .try_into() - .expect("Namespace should never fail to be converted to a BoundedVec.") + impl Get for DipProviderDepositNamespace { + fn get() -> DepositNamespaces { + DepositNamespaces::DipProvider } } pub const DEPOSIT_AMOUNT: Balance = 2 * UNIT; - pub type DepositCollectorHooks = FixedDepositCollectorViaDepositsPallet>; + pub type DepositCollectorHooks = + FixedDepositCollectorViaDepositsPallet>; pub enum CommitmentDepositRemovalHookError { DecodeKey, @@ -103,7 +104,7 @@ pub mod deposit { type Error = CommitmentDepositRemovalHookError; fn on_deposit_reclaimed( - _namespace: &NamespaceOf, + _namespace: &::Namespace, key: &DepositKeyOf, _deposit: DepositEntryOf, ) -> Result<(), Self::Error> { @@ -130,7 +131,7 @@ impl pallet_deposit_storage::Config for Runtime { type Currency = Balances; type DepositHooks = DepositHooks; type MaxKeyLength = ConstU32<256>; - type MaxNamespaceLength = ConstU32<32>; + type Namespace = DepositNamespaces; type RuntimeEvent = RuntimeEvent; type RuntimeHoldReason = RuntimeHoldReason; } From 24cb5ac5c19b80461a0d86ba6515b8c521aa255a Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Mon, 6 Nov 2023 12:07:41 +0100 Subject: [PATCH 20/46] Simplify runtime API implementation --- dip-template/runtimes/dip-provider/src/lib.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index af36953dea..c1ae67b9c2 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -571,12 +571,10 @@ impl_runtime_apis! { impl kilt_runtime_api_dip_provider::DipProvider>, runtime_api::DipProofError> for Runtime { fn generate_proof(request: runtime_api::DipProofRequest) -> Result>, runtime_api::DipProofError> { - let linked_did_info = match ::IdentityProvider::retrieve(&request.identifier) { - Ok(Some(linked_did_info)) => Ok(linked_did_info), - Ok(None) => Err(runtime_api::DipProofError::IdentityNotFound), - Err(e) => Err(runtime_api::DipProofError::IdentityProviderError(e)) - }?; - DidMerkleRootGenerator::::generate_proof(&linked_did_info, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProofError) + let maybe_identity_details = ::IdentityProvider::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProviderError)?; + let identity_details = maybe_identity_details.ok_or(runtime_api::DipProofError::IdentityNotFound)?; + + DidMerkleRootGenerator::::generate_proof(&identity_details, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProofError) } } } From f73778daaf1dbf38db5d0a6a948698c124001146 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Mon, 6 Nov 2023 16:04:05 +0100 Subject: [PATCH 21/46] Open PR comments --- dip-template/runtimes/dip-provider/src/lib.rs | 4 ++-- pallets/pallet-deposit-storage/src/deposit.rs | 4 ++-- pallets/pallet-dip-provider/src/lib.rs | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index c1ae67b9c2..94e58c36c4 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -51,7 +51,7 @@ use frame_system::{ }; use pallet_balances::AccountData; use pallet_collator_selection::IdentityCollator; -use pallet_dip_provider::traits::IdentityProvider; +use pallet_dip_provider::{traits::IdentityProvider, IdentityProviderOf}; use pallet_session::{FindAccountFromAuthorIndex, PeriodicSessions}; use pallet_transaction_payment::{CurrencyAdapter, FeeDetails, RuntimeDispatchInfo}; use runtime_common::dip::merkle::{CompleteMerkleProof, DidMerkleProofOf, DidMerkleRootGenerator}; @@ -571,7 +571,7 @@ impl_runtime_apis! { impl kilt_runtime_api_dip_provider::DipProvider>, runtime_api::DipProofError> for Runtime { fn generate_proof(request: runtime_api::DipProofRequest) -> Result>, runtime_api::DipProofError> { - let maybe_identity_details = ::IdentityProvider::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProviderError)?; + let maybe_identity_details = IdentityProviderOf::::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProviderError)?; let identity_details = maybe_identity_details.ok_or(runtime_api::DipProofError::IdentityNotFound)?; DidMerkleRootGenerator::::generate_proof(&identity_details, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProofError) diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index c68e818297..a76acce619 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -24,7 +24,7 @@ use frame_support::{ }, }; use kilt_support::Deposit; -use pallet_dip_provider::{traits::ProviderHooks, IdentityCommitmentVersion}; +use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::traits::Get; @@ -62,7 +62,7 @@ impl From for u16 { } } -impl ProviderHooks +impl DipProviderHooks for FixedDepositCollectorViaDepositsPallet where Runtime: pallet_dip_provider::Config + Config, diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index e9ec706d51..63f2727331 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -35,6 +35,7 @@ pub mod pallet { use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; + pub type IdentityProviderOf = ::IdentityProvider; pub type IdentityOf = <::IdentityProvider as IdentityProvider<::Identifier>>::Success; pub type IdentityCommitmentVersion = u16; From 1841f0fa64e49381d4e18d3124950624a8343d65 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 09:24:30 +0100 Subject: [PATCH 22/46] Remove unused constant --- pallets/pallet-dip-provider/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 63f2727331..f01b78c52e 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -40,7 +40,6 @@ pub mod pallet { pub type IdentityCommitmentVersion = u16; pub const LATEST_COMMITMENT_VERSION: IdentityCommitmentVersion = 0; - pub const MAX_COMMITMENTS_PER_IDENTITY: u16 = LATEST_COMMITMENT_VERSION + 1; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); #[pallet::config] From 66ba06ccc87854a4aaeee5aed1748cdc75576b62 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 12:43:28 +0100 Subject: [PATCH 23/46] WIP trait refactoring --- crates/kilt-dip-support/src/export/child.rs | 49 +++--- crates/kilt-dip-support/src/export/sibling.rs | 69 ++++---- crates/kilt-dip-support/src/lib.rs | 3 +- crates/kilt-dip-support/src/state_proofs.rs | 6 +- crates/kilt-dip-support/src/traits.rs | 4 +- crates/kilt-dip-support/src/utils.rs | 13 +- dip-template/runtimes/dip-consumer/src/dip.rs | 8 +- pallets/did/src/lib.rs | 4 +- pallets/pallet-deposit-storage/src/deposit.rs | 6 +- pallets/pallet-dip-consumer/src/lib.rs | 24 +-- pallets/pallet-dip-consumer/src/traits.rs | 42 ++--- pallets/pallet-dip-provider/src/lib.rs | 27 ++-- pallets/pallet-dip-provider/src/traits.rs | 150 ++++++++++-------- 13 files changed, 203 insertions(+), 202 deletions(-) diff --git a/crates/kilt-dip-support/src/export/child.rs b/crates/kilt-dip-support/src/export/child.rs index c238080099..060c0f4975 100644 --- a/crates/kilt-dip-support/src/export/child.rs +++ b/crates/kilt-dip-support/src/export/child.rs @@ -146,8 +146,7 @@ pub struct VersionedDipChildProviderStateProofVerifier< ); impl< - Call, - Subject, + Runtime, RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, @@ -162,7 +161,7 @@ impl< LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for VersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, @@ -179,7 +178,8 @@ impl< LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, + Runtime: pallet_dip_consumer::Config, + ::RuntimeCall: Encode, TxSubmitter: Encode, RelayChainInfo: RelayChainStorageInfo @@ -202,7 +202,8 @@ impl< ChildProviderParachainId: Get, - ChildProviderStateInfo: ProviderParachainStateInfo, + ChildProviderStateInfo: + ProviderParachainStateInfo, OutputOf: Ord + From::Hasher>>, ChildProviderStateInfo::BlockNumber: Encode + Clone, ChildProviderStateInfo::Commitment: Decode, @@ -214,8 +215,10 @@ impl< LocalContextProvider::Hash: Encode, LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, - LocalDidCallVerifier: - DipCallOriginFilter, DidVerificationKeyRelationship)>, + LocalDidCallVerifier: DipCallOriginFilter< + ::RuntimeCall, + OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), + >, ProviderDipMerkleHasher: sp_core::Hasher, ProviderDidKeyId: Encode + Clone + Into, @@ -229,7 +232,6 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = VersionedChildParachainDipStateProof< ::BlockNumber, ::Hasher, @@ -242,7 +244,6 @@ impl< ProviderLinkedAccountId, >, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -254,10 +255,10 @@ impl< >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { @@ -365,8 +366,7 @@ mod v0 { ); impl< - Call, - Subject, + Runtime, RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, @@ -381,7 +381,7 @@ mod v0 { LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for DipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, @@ -398,7 +398,8 @@ mod v0 { LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, + Runtime: pallet_dip_consumer::Config, + ::RuntimeCall: Encode, TxSubmitter: Encode, RelayChainInfo: RelayChainStorageInfo @@ -422,7 +423,7 @@ mod v0 { ChildProviderParachainId: Get, ChildProviderStateInfo: - ProviderParachainStateInfo, + ProviderParachainStateInfo, OutputOf: Ord + From::Hasher>>, ChildProviderStateInfo::BlockNumber: Encode + Clone, @@ -436,7 +437,7 @@ mod v0 { LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - Call, + ::RuntimeCall, OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, @@ -452,7 +453,6 @@ mod v0 { DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = ChildParachainDipStateProof< ::BlockNumber, ::Hasher, @@ -465,7 +465,6 @@ mod v0 { ProviderLinkedAccountId, >, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -477,10 +476,10 @@ mod v0 { >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Retrieve block hash from provider at the proof height diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index e0b3154c54..80cb654e39 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -139,8 +139,7 @@ pub struct VersionedDipSiblingProviderStateProofVerifier< ); impl< - Call, - Subject, + Runtime, RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, @@ -155,7 +154,7 @@ impl< LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for VersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, @@ -172,7 +171,8 @@ impl< LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, + Runtime: pallet_dip_consumer::Config, + ::RuntimeCall: Encode, TxSubmitter: Encode, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, @@ -183,7 +183,7 @@ impl< SiblingProviderParachainId: Get, SiblingProviderStateInfo: - traits::ProviderParachainStateInfo, + traits::ProviderParachainStateInfo, OutputOf: Ord + From>, SiblingProviderStateInfo::BlockNumber: Encode + Clone, SiblingProviderStateInfo::Commitment: Decode, @@ -194,8 +194,10 @@ impl< LocalContextProvider::Hash: Encode, LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, - LocalDidCallVerifier: - DipCallOriginFilter, DidVerificationKeyRelationship)>, + LocalDidCallVerifier: DipCallOriginFilter< + ::RuntimeCall, + OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), + >, ProviderDipMerkleHasher: sp_core::Hasher, ProviderDidKeyId: Encode + Clone + Into, @@ -209,7 +211,6 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = VersionedSiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -222,7 +223,6 @@ impl< >, LocalContextProvider::BlockNumber, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -234,10 +234,10 @@ impl< >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { @@ -268,8 +268,10 @@ pub mod latest { } mod v0 { + use super::*; + use frame_support::Parameter; use sp_std::borrow::Borrow; use crate::{ @@ -327,8 +329,7 @@ mod v0 { ); impl< - Call, - Subject, + Runtime, RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, @@ -343,7 +344,7 @@ mod v0 { LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for DipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, @@ -360,38 +361,42 @@ mod v0 { LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, + Runtime: pallet_dip_consumer::Config, + ::RuntimeCall: Encode, + Runtime::LocalIdentityInfo: Default, TxSubmitter: Encode, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, OutputOf: Ord, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, + RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact + Parameter, RelayChainStateInfo::Key: AsRef<[u8]>, SiblingProviderParachainId: Get, - SiblingProviderStateInfo: - traits::ProviderParachainStateInfo, + SiblingProviderStateInfo: traits::ProviderParachainStateInfo< + Identifier = Runtime::Identifier, + Commitment = ProviderDipMerkleHasher::Out, + >, OutputOf: Ord + From>, - SiblingProviderStateInfo::BlockNumber: Encode + Clone, + SiblingProviderStateInfo::BlockNumber: Parameter, SiblingProviderStateInfo::Commitment: Decode, SiblingProviderStateInfo::Key: AsRef<[u8]>, LocalContextProvider: DidSignatureVerifierContext, - LocalContextProvider::BlockNumber: Encode + CheckedSub + From + PartialOrd, + LocalContextProvider::BlockNumber: Parameter + CheckedSub + From + PartialOrd, LocalContextProvider::Hash: Encode, LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - Call, + ::RuntimeCall, OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Encode + Clone + Into, - ProviderAccountId: Encode + Clone, - ProviderLinkedAccountId: Encode + Clone, - ProviderWeb3Name: Encode + Clone, + ProviderDidKeyId: Parameter + Into, + ProviderAccountId: Parameter, + ProviderLinkedAccountId: Parameter, + ProviderWeb3Name: Parameter, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -399,7 +404,6 @@ mod v0 { DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = SiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -412,7 +416,6 @@ mod v0 { >, LocalContextProvider::BlockNumber, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -424,10 +427,10 @@ mod v0 { >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Verify relay chain proof. diff --git a/crates/kilt-dip-support/src/lib.rs b/crates/kilt-dip-support/src/lib.rs index 2daacfc640..5681cadc1d 100644 --- a/crates/kilt-dip-support/src/lib.rs +++ b/crates/kilt-dip-support/src/lib.rs @@ -29,4 +29,5 @@ pub mod utils; mod export; pub use export::*; -pub use state_proofs::relay_chain::RococoStateRootsViaRelayStorePallet; +pub use state_proofs::relay_chain::RelayStateRootsViaRelayStorePallet; +pub use traits::{FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}; diff --git a/crates/kilt-dip-support/src/state_proofs.rs b/crates/kilt-dip-support/src/state_proofs.rs index 1f4866ab85..0156143ce9 100644 --- a/crates/kilt-dip-support/src/state_proofs.rs +++ b/crates/kilt-dip-support/src/state_proofs.rs @@ -166,9 +166,9 @@ pub(super) mod relay_chain { } } - pub struct RococoStateRootsViaRelayStorePallet(PhantomData); + pub struct RelayStateRootsViaRelayStorePallet(PhantomData); - impl RelayChainStorageInfo for RococoStateRootsViaRelayStorePallet + impl RelayChainStorageInfo for RelayStateRootsViaRelayStorePallet where Runtime: pallet_relay_store::Config, { @@ -190,7 +190,7 @@ pub(super) mod relay_chain { } } - impl RelayChainStateInfo for RococoStateRootsViaRelayStorePallet + impl RelayChainStateInfo for RelayStateRootsViaRelayStorePallet where Runtime: pallet_relay_store::Config, { diff --git a/crates/kilt-dip-support/src/traits.rs b/crates/kilt-dip-support/src/traits.rs index d3c013b1b5..aa426aae17 100644 --- a/crates/kilt-dip-support/src/traits.rs +++ b/crates/kilt-dip-support/src/traits.rs @@ -17,7 +17,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org use frame_system::pallet_prelude::BlockNumberFor; -use pallet_dip_provider::IdentityCommitmentVersion; +use pallet_dip_provider::{IdentityCommitmentOf, IdentityCommitmentVersion}; use sp_core::storage::StorageKey; use sp_runtime::traits::{CheckedAdd, One, Zero}; use sp_std::marker::PhantomData; @@ -87,7 +87,7 @@ where T: pallet_dip_provider::Config, { type BlockNumber = BlockNumberFor; - type Commitment = T::IdentityCommitment; + type Commitment = IdentityCommitmentOf; type Hasher = T::Hashing; type Identifier = T::Identifier; type Key = StorageKey; diff --git a/crates/kilt-dip-support/src/utils.rs b/crates/kilt-dip-support/src/utils.rs index 30d2d01d50..68eee19a63 100644 --- a/crates/kilt-dip-support/src/utils.rs +++ b/crates/kilt-dip-support/src/utils.rs @@ -105,16 +105,17 @@ where } } -impl IdentityProvider for CombineIdentityFrom +impl IdentityProvider for CombineIdentityFrom where - A: IdentityProvider, - B: IdentityProvider, - C: IdentityProvider, + Runtime: pallet_dip_provider::Config, + A: IdentityProvider, + B: IdentityProvider, + C: IdentityProvider, { type Error = CombineError; - type Success = CombinedIdentityResult, Option, Option>; + type Identity = CombinedIdentityResult, Option, Option>; - fn retrieve(identifier: &Identifier) -> Result, Self::Error> { + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { match ( A::retrieve(identifier), B::retrieve(identifier), diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 91ca198c50..1d6e49c805 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -16,12 +16,12 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use did::{DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime, Web3Name}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::{DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}, - RococoStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, + traits::DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, + RelayStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, }; use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; @@ -33,7 +33,7 @@ use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutputOf = >::VerificationResult; pub type ProofVerifier = VersionedDipSiblingProviderStateProofVerifier< - RococoStateRootsViaRelayStorePallet, + RelayStateRootsViaRelayStorePallet, ConstU32<2_000>, ProviderParachainStateInfoViaProviderPallet, AccountId, diff --git a/pallets/did/src/lib.rs b/pallets/did/src/lib.rs index 1de019e94b..8c0e112b7b 100644 --- a/pallets/did/src/lib.rs +++ b/pallets/did/src/lib.rs @@ -107,8 +107,8 @@ pub use crate::{ default_weights::WeightInfo, did_details::{ DeriveDidCallAuthorizationVerificationKeyRelationship, DeriveDidCallKeyRelationshipResult, - DidAuthorizedCallOperationWithVerificationRelationship, DidSignature, DidVerificationKeyRelationship, - RelationshipDeriveError, + DidAuthorizedCallOperationWithVerificationRelationship, DidSignature, DidVerificationKey, + DidVerificationKeyRelationship, RelationshipDeriveError, }, origin::{DidRawOrigin, EnsureDidOrigin}, pallet::*, diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index a76acce619..c01296e23e 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -24,7 +24,7 @@ use frame_support::{ }, }; use kilt_support::Deposit; -use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentVersion}; +use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentOf, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::traits::Get; @@ -74,7 +74,7 @@ where fn on_identity_committed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); @@ -111,7 +111,7 @@ where fn on_commitment_removed( identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, version: pallet_dip_provider::IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index c513bbc130..d29168e77d 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -39,10 +39,8 @@ pub mod pallet { use crate::traits::IdentityProofVerifier; - pub type VerificationResultOf = <::ProofVerifier as IdentityProofVerifier< - ::RuntimeCall, - ::Identifier, - >>::VerificationResult; + pub type ProofOf = <::ProofVerifier as IdentityProofVerifier>::Proof; + pub type VerificationResultOf = <::ProofVerifier as IdentityProofVerifier>::VerificationResult; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); @@ -58,25 +56,11 @@ pub mod pallet { type DipCallOriginFilter: Contains<::RuntimeCall>; /// The identifier of a subject, e.g., a DID. type Identifier: Parameter + MaxEncodedLen; - /// The proof users must provide to operate with their higher-level - /// identity. Depending on the use cases, this proof can contain - /// heterogeneous bits of information that the proof verifier will - /// utilize. For instance, a proof could contain both a Merkle proof and - /// a DID signature. - type IdentityProof: Parameter; /// The details stored in this pallet associated with any given subject. type LocalIdentityInfo: FullCodec + TypeInfo + MaxEncodedLen; - type ProofVerificationError: Into; /// The logic of the proof verifier, called upon each execution of the /// `dispatch_as` extrinsic. - type ProofVerifier: IdentityProofVerifier< - ::RuntimeCall, - Self::Identifier, - Error = Self::ProofVerificationError, - Proof = Self::IdentityProof, - IdentityDetails = Self::LocalIdentityInfo, - Submitter = ::AccountId, - >; + type ProofVerifier: IdentityProofVerifier; /// The overarching runtime call type. type RuntimeCall: Parameter + Dispatchable::RuntimeOrigin>; /// The overarching runtime origin type. @@ -112,7 +96,7 @@ pub mod pallet { pub fn dispatch_as( origin: OriginFor, identifier: T::Identifier, - proof: T::IdentityProof, + proof: ProofOf, call: Box<::RuntimeCall>, ) -> DispatchResult { // TODO: Make origin check configurable, and require that it at least returns diff --git a/pallets/pallet-dip-consumer/src/traits.rs b/pallets/pallet-dip-consumer/src/traits.rs index 0b7fa2a85c..f17148e6b3 100644 --- a/pallets/pallet-dip-consumer/src/traits.rs +++ b/pallets/pallet-dip-consumer/src/traits.rs @@ -16,40 +16,44 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org +use frame_support::Parameter; use sp_std::marker::PhantomData; -pub trait IdentityProofVerifier { - type Error; - type IdentityDetails; - type Proof; - type Submitter; +use crate::Config; + +pub trait IdentityProofVerifier +where + Runtime: Config, +{ + type Error: Into; + type Proof: Parameter; type VerificationResult; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result; } // Always returns success. -pub struct SuccessfulProofVerifier(PhantomData<(IdentityDetails, Proof, Submitter)>); -impl IdentityProofVerifier - for SuccessfulProofVerifier +pub struct SuccessfulProofVerifier(PhantomData); +impl IdentityProofVerifier for SuccessfulProofVerifier +where + Runtime: Config, + Proof: Parameter, { - type Error = (); - type IdentityDetails = IdentityDetails; + type Error = u16; type Proof = Proof; - type Submitter = Submitter; type VerificationResult = (); fn verify_proof_for_call_against_details( - _call: &Call, - _subject: &Subject, - _submitter: &Self::Submitter, - _identity_details: &mut Option, + _call: &::RuntimeCall, + _subject: &Runtime::Identifier, + _submitter: &Runtime::AccountId, + _identity_details: &mut Option, _proof: Self::Proof, ) -> Result { Ok(()) diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index f01b78c52e..0e5dbf9aa6 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -30,13 +30,12 @@ pub mod pallet { use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; - use parity_scale_codec::FullCodec; - use sp_std::fmt::Debug; use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; - pub type IdentityProviderOf = ::IdentityProvider; - pub type IdentityOf = <::IdentityProvider as IdentityProvider<::Identifier>>::Success; + pub type IdentityOf = <::IdentityProvider as IdentityProvider>::Identity; + pub type IdentityCommitmentOf = + <::IdentityCommitmentGenerator as IdentityCommitmentGenerator>::IdentityCommitment; pub type IdentityCommitmentVersion = u16; pub const LATEST_COMMITMENT_VERSION: IdentityCommitmentVersion = 0; @@ -45,18 +44,10 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { type CommitOriginCheck: EnsureOrigin; - type CommitOrigin: SubmitterInfo; + type CommitOrigin: SubmitterInfo; type Identifier: Parameter + MaxEncodedLen; - type IdentityCommitment: Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen; - type IdentityCommitmentGenerator: IdentityCommitmentGenerator< - Self::Identifier, - IdentityOf, - Error = Self::IdentityCommitmentGeneratorError, - Output = Self::IdentityCommitment, - >; - type IdentityCommitmentGeneratorError: Into; - type IdentityProvider: IdentityProvider; - type IdentityProviderError: Into; + type IdentityCommitmentGenerator: IdentityCommitmentGenerator; + type IdentityProvider: IdentityProvider; type ProviderHooks: ProviderHooks; type RuntimeEvent: From> + IsType<::RuntimeEvent>; } @@ -69,7 +60,7 @@ pub mod pallet { ::Identifier, Twox64Concat, IdentityCommitmentVersion, - ::IdentityCommitment, + IdentityCommitmentOf, >; #[pallet::pallet] @@ -81,7 +72,7 @@ pub mod pallet { pub enum Event { IdentityCommitted { identifier: T::Identifier, - commitment: T::IdentityCommitment, + commitment: IdentityCommitmentOf, version: IdentityCommitmentVersion, }, VersionedIdentityDeleted { @@ -175,7 +166,7 @@ pub mod pallet { pub fn delete_identity_commitment_storage_entry( identifier: &T::Identifier, version: IdentityCommitmentVersion, - ) -> Result { + ) -> Result, DispatchError> { let commitment = IdentityCommitments::::take(identifier, version).ok_or(Error::::IdentityNotFound)?; Self::deposit_event(Event::::VersionedIdentityDeleted { identifier: identifier.clone(), diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 52785c8ad0..98ce555775 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -19,69 +19,36 @@ use did::DidRawOrigin; use frame_support::sp_runtime::AccountId32; -use crate::{Config, IdentityCommitmentVersion}; +use crate::{Config, IdentityCommitmentOf, IdentityCommitmentVersion}; -pub use identity_generation::*; -pub mod identity_generation { +pub use identity_provision::*; +pub mod identity_provision { use super::*; use sp_std::marker::PhantomData; - pub trait IdentityCommitmentGenerator { - type Error; - type Output; - - fn generate_commitment( - identifier: &Identifier, - identity: &Identity, - version: IdentityCommitmentVersion, - ) -> Result; - } - - // Implement the `IdentityCommitmentGenerator` by returning the `Default` value - // for the `Output` type. - pub struct DefaultIdentityCommitmentGenerator(PhantomData); - - impl IdentityCommitmentGenerator - for DefaultIdentityCommitmentGenerator + pub trait IdentityProvider where - Output: Default, + Runtime: Config, { - type Error = (); - type Output = Output; - - fn generate_commitment( - _identifier: &Identifier, - _identity: &Identity, - _version: IdentityCommitmentVersion, - ) -> Result { - Ok(Output::default()) - } - } -} + type Error: Into; + type Identity; -pub use identity_provision::*; -pub mod identity_provision { - use sp_std::marker::PhantomData; - - pub trait IdentityProvider { - type Error; - type Success; - - fn retrieve(identifier: &Identifier) -> Result, Self::Error>; + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error>; } // Return the `Default` value if `Identity` adn `Details` both implement it. pub struct DefaultIdentityProvider(PhantomData); - impl IdentityProvider for DefaultIdentityProvider + impl IdentityProvider for DefaultIdentityProvider where + Runtime: Config, Identity: Default, { - type Error = (); - type Success = Identity; + type Error = u16; + type Identity = Identity; - fn retrieve(_identifier: &Identifier) -> Result, Self::Error> { + fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { Ok(Some(Identity::default())) } } @@ -89,37 +56,88 @@ pub mod identity_provision { // Always return `None`. Might be useful for tests. pub struct NoneIdentityProvider; - impl IdentityProvider for NoneIdentityProvider { - type Error = (); - type Success = (); + impl IdentityProvider for NoneIdentityProvider + where + Runtime: Config, + { + type Error = u16; + type Identity = (); - fn retrieve(_identifier: &Identifier) -> Result, Self::Error> { + fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { Ok(None) } } } -pub trait SubmitterInfo { - type Submitter; +pub use identity_generation::*; +pub mod identity_generation { + use super::*; + + use parity_scale_codec::{FullCodec, MaxEncodedLen}; + use scale_info::TypeInfo; + use sp_std::{fmt::Debug, marker::PhantomData}; - fn submitter(&self) -> Self::Submitter; -} + use crate::IdentityOf; + + pub trait IdentityCommitmentGenerator + where + Runtime: Config, + { + type Error: Into; + type IdentityCommitment: Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen; -impl SubmitterInfo for AccountId32 { - type Submitter = Self; + fn generate_commitment( + identifier: &Runtime::Identifier, + identity: &IdentityOf, + version: IdentityCommitmentVersion, + ) -> Result; + } + + // Implement the `IdentityCommitmentGenerator` by returning the `Default` value + // for the `Output` type. + pub struct DefaultIdentityCommitmentGenerator(PhantomData); + + impl IdentityCommitmentGenerator for DefaultIdentityCommitmentGenerator + where + Runtime: Config, + Runtime::IdentityProvider: IdentityProvider, + Output: Default + Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen, + { + type Error = u16; + type IdentityCommitment = Output; - fn submitter(&self) -> Self::Submitter { - self.clone() + fn generate_commitment( + _identifier: &Runtime::Identifier, + _identity: &IdentityOf, + _version: IdentityCommitmentVersion, + ) -> Result { + Ok(Output::default()) + } } } -impl SubmitterInfo for DidRawOrigin +pub trait SubmitterInfo where - AccountId: Clone, + Runtime: Config, { - type Submitter = AccountId; + fn submitter(&self) -> Runtime::AccountId; +} - fn submitter(&self) -> Self::Submitter { +impl SubmitterInfo for AccountId32 +where + Runtime: Config, + Runtime::AccountId: From, +{ + fn submitter(&self) -> Runtime::AccountId { + self.clone().into() + } +} + +impl SubmitterInfo for DidRawOrigin +where + Runtime: Config, +{ + fn submitter(&self) -> Runtime::AccountId { self.submitter.clone() } } @@ -133,14 +151,14 @@ where fn on_identity_committed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - commitment: &Runtime::IdentityCommitment, + commitment: &IdentityCommitmentOf, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error>; fn on_commitment_removed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - commitment: &Runtime::IdentityCommitment, + commitment: &IdentityCommitmentOf, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error>; } @@ -156,7 +174,7 @@ where fn on_commitment_removed( _identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, _version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { Ok(()) @@ -165,7 +183,7 @@ where fn on_identity_committed( _identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, _version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { Ok(()) From 2725e260f4f578575cb039688e3e9c5cbbbc08df Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 17:04:55 +0100 Subject: [PATCH 24/46] Failed attempt at depending on the runtime --- Cargo.lock | 3 + crates/kilt-dip-support/Cargo.toml | 6 + crates/kilt-dip-support/src/export/common.rs | 2 +- crates/kilt-dip-support/src/export/mod.rs | 15 +- crates/kilt-dip-support/src/export/sibling.rs | 392 +++++++----------- dip-template/runtimes/dip-consumer/src/dip.rs | 29 +- .../dip-consumer/src/origin_adapter.rs | 8 +- dip-template/runtimes/dip-provider/src/dip.rs | 9 +- pallets/pallet-dip-provider/src/lib.rs | 1 + runtimes/common/src/dip/did.rs | 42 +- runtimes/common/src/dip/merkle.rs | 18 +- 11 files changed, 216 insertions(+), 309 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abcc85ce85..6979a81529 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4534,9 +4534,12 @@ dependencies = [ "hash-db", "hex-literal 0.3.4", "log", + "pallet-did-lookup", "pallet-dip-consumer", "pallet-dip-provider", "pallet-relay-store", + "pallet-web3-names", + "parachain-info", "parity-scale-codec", "rococo-runtime", "scale-info", diff --git a/crates/kilt-dip-support/Cargo.toml b/crates/kilt-dip-support/Cargo.toml index b9ba5ff712..42126c78ad 100644 --- a/crates/kilt-dip-support/Cargo.toml +++ b/crates/kilt-dip-support/Cargo.toml @@ -17,9 +17,11 @@ log.workspace = true # Internal dependencies did.workspace = true +pallet-did-lookup.workspace = true pallet-dip-consumer.workspace = true pallet-dip-provider.workspace = true pallet-relay-store.workspace = true +pallet-web3-names.workspace = true # Parity dependencies parity-scale-codec = {workspace = true, features = ["derive"]} @@ -42,6 +44,7 @@ xcm-executor.workspace = true # Cumulus dependencies cumulus-pallet-parachain-system.workspace = true +parachain-info.workspace = true [dev-dependencies] hex-literal.workspace = true @@ -53,9 +56,11 @@ std = [ "hash-db/std", "log/std", "did/std", + "pallet-did-lookup/std", "pallet-dip-consumer/std", "pallet-dip-provider/std", "pallet-relay-store/std", + "pallet-web3-names/std", "parity-scale-codec/std", "scale-info/std", "frame-system/std", @@ -70,6 +75,7 @@ std = [ "xcm/std", "xcm-executor/std", "cumulus-pallet-parachain-system/std", + "parachain-info/std", ] runtime-benchmarks = [ "pallet-dip-consumer/runtime-benchmarks", diff --git a/crates/kilt-dip-support/src/export/common.rs b/crates/kilt-dip-support/src/export/common.rs index d0eff66d68..cc40142ce5 100644 --- a/crates/kilt-dip-support/src/export/common.rs +++ b/crates/kilt-dip-support/src/export/common.rs @@ -28,7 +28,7 @@ pub mod v0 { use crate::{did::TimeBoundDidSignature, merkle::DidMerkleProof}; - #[derive(Encode, Decode, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug, TypeInfo, Clone)] + #[derive(Encode, Decode, PartialEq, Eq, RuntimeDebug, TypeInfo, Clone)] pub struct ParachainRootStateProof { pub(crate) relay_block_height: RelayBlockHeight, pub(crate) proof: Vec>, diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index c6a92e7d5b..ecb6f9e612 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -16,19 +16,20 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -mod child; +// mod child; mod common; mod sibling; -pub use child::{ - DipChildProviderStateProofVerifierError, VersionedChildParachainDipStateProof, - VersionedDipChildProviderStateProofVerifier, -}; +// pub use child::{ +// DipChildProviderStateProofVerifierError, +// VersionedChildParachainDipStateProof, +// VersionedDipChildProviderStateProofVerifier, +// }; pub use sibling::{ - DipSiblingProviderStateProofVerifierError, VersionedDipSiblingProviderStateProofVerifier, + DipSiblingProviderStateProofVerifierError, VersionedKiltDipSiblingProviderStateProofVerifier, VersionedSiblingParachainDipStateProof, }; pub mod latest { - pub use super::{child::latest::*, common::latest::*, sibling::latest::*}; + pub use super::{common::latest::*, sibling::latest::*}; } diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index 80cb654e39..5c0cb50e70 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -16,19 +16,23 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; +use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use frame_support::Parameter; +use frame_system::pallet_prelude::BlockNumberFor; +use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; +use pallet_dip_provider::IdentityCommitmentOf; use parity_scale_codec::{Decode, Encode, HasCompact}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, U256}; -use sp_runtime::traits::{CheckedSub, Get}; +use sp_runtime::traits::{CheckedAdd, One, Zero}; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{ did::RevealedDidKeysSignatureAndCallVerifierError, merkle::{DidMerkleProofVerifierError, RevealedDidMerkleProofLeaf, RevealedDidMerkleProofLeaves}, state_proofs::{parachain::DipIdentityCommitmentProofVerifierError, relay_chain::ParachainHeadProofVerifierError}, - traits::{self, Bump, DidSignatureVerifierContext, DipCallOriginFilter}, + traits::{self, DipCallOriginFilter}, utils::OutputOf, }; @@ -105,105 +109,62 @@ where } } -pub struct VersionedDipSiblingProviderStateProofVerifier< +pub struct VersionedKiltDipSiblingProviderStateProofVerifier< + KiltRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + KiltDipMerkleHasher, + LocalDidCallVerifier, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, + const DID_SIGNATURE_VALIDITY: u16, >( - #[allow(clippy::type_complexity)] PhantomData<( + KiltRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, - LocalDidDetails, - LocalContextProvider, + KiltDipMerkleHasher, LocalDidCallVerifier, )>, ); impl< - Runtime, + KiltRuntime, + ConsumerRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + KiltDipMerkleHasher, + LocalDidCallVerifier, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, - > IdentityProofVerifier - for VersionedDipSiblingProviderStateProofVerifier< + const DID_SIGNATURE_VALIDITY: u16, + > IdentityProofVerifier + for VersionedKiltDipSiblingProviderStateProofVerifier< + KiltRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + KiltDipMerkleHasher, + LocalDidCallVerifier, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, + DID_SIGNATURE_VALIDITY, > where - Runtime: pallet_dip_consumer::Config, - ::RuntimeCall: Encode, - TxSubmitter: Encode, - + KiltRuntime: did::Config + + pallet_did_lookup::Config + + pallet_web3_names::Config + + pallet_dip_provider::Config + + parachain_info::Config, + OutputOf: Ord + From>, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Default + CheckedAdd + Zero + One, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, - OutputOf: Ord, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, + RelayChainStateInfo::BlockNumber: Parameter + Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, - - SiblingProviderParachainId: Get, - - SiblingProviderStateInfo: - traits::ProviderParachainStateInfo, - OutputOf: Ord + From>, - SiblingProviderStateInfo::BlockNumber: Encode + Clone, - SiblingProviderStateInfo::Commitment: Decode, - SiblingProviderStateInfo::Key: AsRef<[u8]>, - - LocalContextProvider: DidSignatureVerifierContext, - LocalContextProvider::BlockNumber: Encode + CheckedSub + From + PartialOrd, - LocalContextProvider::Hash: Encode, - LocalContextProvider::SignedExtra: Encode, - LocalDidDetails: Bump + Default + Encode, + RelayChainStateInfo::ParaId: From, + KiltDipMerkleHasher: sp_core::Hasher>, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, - OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), + ::RuntimeCall, + OriginInfo = ( + DidVerificationKey, + DidVerificationKeyRelationship, + ), >, - - ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Encode + Clone + Into, - ProviderAccountId: Encode + Clone, - ProviderLinkedAccountId: Encode + Clone, - ProviderWeb3Name: Encode + Clone, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -215,49 +176,45 @@ impl< RelayChainStateInfo::BlockNumber, Vec>, RevealedDidMerkleProofLeaf< - ProviderDidKeyId, - ProviderAccountId, - SiblingProviderStateInfo::BlockNumber, - ProviderWeb3Name, - ProviderLinkedAccountId, + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, >, - LocalContextProvider::BlockNumber, + BlockNumberFor, >; type VerificationResult = RevealedDidMerkleProofLeaves< - ProviderDidKeyId, - ProviderAccountId, - SiblingProviderStateInfo::BlockNumber, - ProviderWeb3Name, - ProviderLinkedAccountId, + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &::Identifier, + submitter: &::AccountId, + identity_details: &mut Option<::LocalIdentityInfo>, proof: Self::Proof, ) -> Result { + use v0::KiltDipSiblingProviderStateProofVerifier; + match proof { VersionedSiblingParachainDipStateProof::V0(v0_proof) => { - v0::DipSiblingProviderStateProofVerifier::< - RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + let a = KiltDipSiblingProviderStateProofVerifier::< + KiltRuntime, + _, + _, + _, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, - >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof) + DID_SIGNATURE_VALIDITY, + >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof); + Ok(Default::default()) } } } @@ -271,7 +228,11 @@ mod v0 { use super::*; + use did::KeyIdOf; use frame_support::Parameter; + use frame_system::pallet_prelude::BlockNumberFor; + use pallet_did_lookup::linkable_account::LinkableAccountId; + use pallet_dip_provider::IdentityCommitmentOf; use sp_std::borrow::Borrow; use crate::{ @@ -279,7 +240,7 @@ mod v0 { export::common::v0::{DipMerkleProofAndDidSignature, ParachainRootStateProof}, merkle::DidMerkleProofVerifier, state_proofs::{parachain::DipIdentityCommitmentProofVerifier, relay_chain::ParachainHeadProofVerifier}, - traits::ProviderParachainStateInfo, + FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, }; #[derive(Encode, Decode, PartialEq, Eq, RuntimeDebug, TypeInfo, Clone)] @@ -295,108 +256,62 @@ mod v0 { } #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)] - pub struct DipSiblingProviderStateProofVerifier< + pub struct KiltDipSiblingProviderStateProofVerifier< + KiltRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + KiltDipMerkleHasher, + LocalDidCallVerifier, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, + const DID_SIGNATURE_VALIDITY: u16, >( - #[allow(clippy::type_complexity)] PhantomData<( + KiltRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, - LocalDidDetails, - LocalContextProvider, + KiltDipMerkleHasher, LocalDidCallVerifier, )>, ); impl< - Runtime, + KiltRuntime, + ConsumerRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + KiltDipMerkleHasher, + LocalDidCallVerifier, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, - > IdentityProofVerifier - for DipSiblingProviderStateProofVerifier< + const DID_SIGNATURE_VALIDITY: u16, + > IdentityProofVerifier + for KiltDipSiblingProviderStateProofVerifier< + KiltRuntime, RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, + KiltDipMerkleHasher, + LocalDidCallVerifier, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, + DID_SIGNATURE_VALIDITY, > where - Runtime: pallet_dip_consumer::Config, - ::RuntimeCall: Encode, - Runtime::LocalIdentityInfo: Default, - TxSubmitter: Encode, - + KiltRuntime: did::Config + + pallet_did_lookup::Config + + pallet_web3_names::Config + + pallet_dip_provider::Config + + parachain_info::Config, + OutputOf: Ord + From>, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Default + CheckedAdd + Zero + One, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, - OutputOf: Ord, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact + Parameter, + RelayChainStateInfo::BlockNumber: Parameter + Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, - - SiblingProviderParachainId: Get, - - SiblingProviderStateInfo: traits::ProviderParachainStateInfo< - Identifier = Runtime::Identifier, - Commitment = ProviderDipMerkleHasher::Out, - >, - OutputOf: Ord + From>, - SiblingProviderStateInfo::BlockNumber: Parameter, - SiblingProviderStateInfo::Commitment: Decode, - SiblingProviderStateInfo::Key: AsRef<[u8]>, - - LocalContextProvider: DidSignatureVerifierContext, - LocalContextProvider::BlockNumber: Parameter + CheckedSub + From + PartialOrd, - LocalContextProvider::Hash: Encode, - LocalContextProvider::SignedExtra: Encode, - LocalDidDetails: Bump + Default + Encode, + RelayChainStateInfo::ParaId: From, + KiltDipMerkleHasher: sp_core::Hasher>, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, - OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), + ::RuntimeCall, + OriginInfo = ( + DidVerificationKey, + DidVerificationKeyRelationship, + ), >, - - ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Parameter + Into, - ProviderAccountId: Parameter, - ProviderLinkedAccountId: Parameter, - ProviderWeb3Name: Parameter, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -408,60 +323,53 @@ mod v0 { RelayChainStateInfo::BlockNumber, Vec>, RevealedDidMerkleProofLeaf< - ProviderDidKeyId, - ProviderAccountId, - SiblingProviderStateInfo::BlockNumber, - ProviderWeb3Name, - ProviderLinkedAccountId, + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, >, - LocalContextProvider::BlockNumber, + BlockNumberFor, >; type VerificationResult = RevealedDidMerkleProofLeaves< - ProviderDidKeyId, - ProviderAccountId, - SiblingProviderStateInfo::BlockNumber, - ProviderWeb3Name, - ProviderLinkedAccountId, + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &::RuntimeCall, + subject: &::Identifier, + submitter: &::AccountId, + identity_details: &mut Option<::LocalIdentityInfo>, proof: Self::Proof, ) -> Result { // 1. Verify relay chain proof. let provider_parachain_header = ParachainHeadProofVerifier::::verify_proof_for_parachain( - &SiblingProviderParachainId::get(), + &u32::from(parachain_info::Pallet::::parachain_id()).into(), &proof.para_state_root.relay_block_height, proof.para_state_root.proof, ) .map_err(DipSiblingProviderStateProofVerifierError::ParachainHeadMerkleProof)?; // 2. Verify parachain state proof. - let subject_identity_commitment = - DipIdentityCommitmentProofVerifier::::verify_proof_for_identifier( - subject, - provider_parachain_header.state_root.into(), - proof.dip_identity_commitment, - ) - .map_err(DipSiblingProviderStateProofVerifierError::IdentityCommitmentMerkleProof)?; + let subject_identity_commitment = DipIdentityCommitmentProofVerifier::< + ProviderParachainStateInfoViaProviderPallet, + >::verify_proof_for_identifier( + subject, + provider_parachain_header.state_root.into(), + proof.dip_identity_commitment, + ) + .map_err(DipSiblingProviderStateProofVerifierError::IdentityCommitmentMerkleProof)?; // 3. Verify DIP merkle proof. - let proof_leaves: RevealedDidMerkleProofLeaves< - ProviderDidKeyId, - ProviderAccountId, - ::BlockNumber, - ProviderWeb3Name, - ProviderLinkedAccountId, - MAX_REVEALED_KEYS_COUNT, - MAX_REVEALED_ACCOUNTS_COUNT, - > = DidMerkleProofVerifier::< - ProviderDipMerkleHasher, + let proof_leaves = DidMerkleProofVerifier::< + KiltDipMerkleHasher, _, _, _, @@ -474,25 +382,25 @@ mod v0 { // 4. Verify DID signature. RevealedDidKeysSignatureAndCallVerifier::< - _, - _, - _, - _, - LocalContextProvider, - _, - _, - _, - LocalDidCallVerifier, - >::verify_did_signature_for_call( - call, - submitter, - identity_details, - RevealedDidKeysAndSignature { - merkle_leaves: proof_leaves.borrow(), - did_signature: proof.did.signature, - }, - ) - .map_err(DipSiblingProviderStateProofVerifierError::DidSignature)?; + _, + _, + _, + _, + FrameSystemDidSignatureContext, + _, + _, + _, + LocalDidCallVerifier, + >::verify_did_signature_for_call( + call, + submitter, + identity_details, + RevealedDidKeysAndSignature { + merkle_leaves: proof_leaves.borrow(), + did_signature: proof.did.signature, + }, + ) + .map_err(DipSiblingProviderStateProofVerifierError::DidSignature)?; Ok(proof_leaves) } diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 1d6e49c805..1f44afb2a7 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -16,46 +16,31 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; -use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime, Web3Name}; +use did::{DidVerificationKey, DidVerificationKeyRelationship}; +use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, - RelayStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, + traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedKiltDipSiblingProviderStateProofVerifier, }; -use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; use sp_runtime::traits::BlakeTwo256; use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; -pub type MerkleProofVerifierOutputOf = - >::VerificationResult; -pub type ProofVerifier = VersionedDipSiblingProviderStateProofVerifier< +pub type ProofVerifier = VersionedKiltDipSiblingProviderStateProofVerifier< + ProviderRuntime, RelayStateRootsViaRelayStorePallet, - ConstU32<2_000>, - ProviderParachainStateInfoViaProviderPallet, - AccountId, BlakeTwo256, - KeyIdOf, - ProviderAccountId, - Web3Name, - LinkableAccountId, + DipCallFilter, 10, 10, - u128, - // Signatures are valid for 50 blocks - FrameSystemDidSignatureContext, - DipCallFilter, + 50, >; impl pallet_dip_consumer::Config for Runtime { type DipCallOriginFilter = PreliminaryDipOriginFilter; type Identifier = DidIdentifier; - type IdentityProof = >::Proof; type LocalIdentityInfo = u128; - type ProofVerificationError = >::Error; type ProofVerifier = ProofVerifier; type RuntimeCall = RuntimeCall; type RuntimeOrigin = RuntimeOrigin; diff --git a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs index b9d008e5c8..51dec83fe7 100644 --- a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs +++ b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs @@ -16,9 +16,9 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutputOf, RuntimeCall, RuntimeOrigin, Web3Name}; +use crate::{AccountId, DidIdentifier, Runtime, RuntimeOrigin, Web3Name}; use frame_support::traits::EnsureOrigin; -use pallet_dip_consumer::{DipOrigin, EnsureDipOrigin}; +use pallet_dip_consumer::{DipOrigin, EnsureDipOrigin, VerificationResultOf}; use pallet_postit::traits::Usernamable; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -41,9 +41,7 @@ impl EnsureOrigin for EnsureDipOriginAdapter { } #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct DipOriginAdapter( - DipOrigin>, -); +pub struct DipOriginAdapter(DipOrigin>); impl Usernamable for DipOriginAdapter { type Username = Web3Name; diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 12ac28a33b..0010249689 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -31,7 +31,7 @@ use sp_std::vec::Vec; use crate::{ deposit::{DepositHooks, DepositNamespaces}, - AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason, + AccountId, Balances, DidIdentifier, Runtime, RuntimeEvent, RuntimeHoldReason, }; pub mod runtime_api { @@ -49,7 +49,7 @@ pub mod runtime_api { #[derive(Encode, Decode, TypeInfo)] pub enum DipProofError { IdentityNotFound, - IdentityProviderError( as IdentityProvider>::Error), + IdentityProviderError( as IdentityProvider>::Error), MerkleProofError(DidMerkleProofError), } } @@ -137,14 +137,11 @@ impl pallet_deposit_storage::Config for Runtime { } impl pallet_dip_provider::Config for Runtime { - type CommitOriginCheck = EnsureDidOrigin; type CommitOrigin = DidRawOrigin; + type CommitOriginCheck = EnsureDidOrigin; type Identifier = DidIdentifier; - type IdentityCommitment = Hash; type IdentityCommitmentGenerator = DidMerkleRootGenerator; - type IdentityCommitmentGeneratorError = DidMerkleProofError; type IdentityProvider = LinkedDidInfoProviderOf; - type IdentityProviderError = as IdentityProvider>::Error; type ProviderHooks = deposit::DepositCollectorHooks; type RuntimeEvent = RuntimeEvent; } diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 0e5dbf9aa6..403a352641 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -34,6 +34,7 @@ pub mod pallet { use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; pub type IdentityOf = <::IdentityProvider as IdentityProvider>::Identity; + pub type IdentityProviderOf = ::IdentityProvider; pub type IdentityCommitmentOf = <::IdentityCommitmentGenerator as IdentityCommitmentGenerator>::IdentityCommitment; pub type IdentityCommitmentVersion = u16; diff --git a/runtimes/common/src/dip/did.rs b/runtimes/common/src/dip/did.rs index f4255c438b..a9aedd8fc1 100644 --- a/runtimes/common/src/dip/did.rs +++ b/runtimes/common/src/dip/did.rs @@ -45,17 +45,18 @@ impl From for u16 { pub struct DidIdentityProvider(PhantomData); -impl IdentityProvider for DidIdentityProvider +impl IdentityProvider for DidIdentityProvider where - T: did::Config, + Runtime: + did::Config::Identifier> + pallet_dip_provider::Config, { type Error = DidIdentityProviderError; - type Success = DidDetails; + type Identity = DidDetails; - fn retrieve(identifier: &T::DidIdentifier) -> Result, Self::Error> { + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { match ( - did::Pallet::::get_did(identifier), - did::Pallet::::get_deleted_did(identifier), + did::Pallet::::get_did(identifier), + did::Pallet::::get_deleted_did(identifier), ) { (Some(details), _) => Ok(Some(details)), (_, Some(_)) => Ok(None), @@ -64,29 +65,31 @@ where } } -pub type Web3OwnershipOf = RevealedWeb3Name<::Web3Name, BlockNumberFor>; +pub type Web3OwnershipOf = + RevealedWeb3Name<::Web3Name, BlockNumberFor>; pub struct DidWeb3NameProvider(PhantomData); -impl IdentityProvider for DidWeb3NameProvider +impl IdentityProvider for DidWeb3NameProvider where - T: pallet_web3_names::Config, + Runtime: pallet_web3_names::Config::Identifier> + + pallet_dip_provider::Config, { type Error = DidIdentityProviderError; - type Success = Web3OwnershipOf; + type Identity = Web3OwnershipOf; - fn retrieve(identifier: &T::Web3NameOwner) -> Result, Self::Error> { - let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { + fn retrieve(identifier: &Runtime::Web3NameOwner) -> Result, Self::Error> { + let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { return Ok(None); }; - let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { + let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { log::error!( "Inconsistent reverse map pallet_web3_names::owner(web3_name). Cannot find owner for web3name {:#?}", web3_name ); return Err(DidIdentityProviderError::Internal); }; - Ok(Some(Web3OwnershipOf:: { + Ok(Some(Web3OwnershipOf:: { web3_name, claimed_at: details.claimed_at, })) @@ -95,16 +98,17 @@ where pub struct DidLinkedAccountsProvider(PhantomData); -impl IdentityProvider for DidLinkedAccountsProvider +impl IdentityProvider for DidLinkedAccountsProvider where - T: pallet_did_lookup::Config, + Runtime: pallet_did_lookup::Config::Identifier> + + pallet_dip_provider::Config, { type Error = DidIdentityProviderError; - type Success = Vec; + type Identity = Vec; - fn retrieve(identifier: &T::DidIdentifier) -> Result, Self::Error> { + fn retrieve(identifier: &Runtime::DidIdentifier) -> Result, Self::Error> { Ok(Some( - pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), + pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), )) } } diff --git a/runtimes/common/src/dip/merkle.rs b/runtimes/common/src/dip/merkle.rs index d7af9c87b5..81de954f25 100644 --- a/runtimes/common/src/dip/merkle.rs +++ b/runtimes/common/src/dip/merkle.rs @@ -20,7 +20,10 @@ use frame_support::RuntimeDebug; use frame_system::pallet_prelude::BlockNumberFor; use kilt_dip_support::merkle::{DidKeyMerkleKey, DidKeyMerkleValue, DidMerkleProof}; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_provider::{traits::IdentityCommitmentGenerator, IdentityCommitmentVersion}; +use pallet_dip_provider::{ + traits::{IdentityCommitmentGenerator, IdentityProvider}, + IdentityCommitmentVersion, IdentityOf, +}; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_std::{borrow::ToOwned, marker::PhantomData, vec::Vec}; @@ -28,7 +31,7 @@ use sp_trie::{generate_trie_proof, LayoutV1, MemoryDB, TrieDBMutBuilder, TrieHas use kilt_dip_support::merkle::{DidKeyRelationship, RevealedDidMerkleProofLeaf}; -use crate::{dip::did::LinkedDidInfoOf, DidIdentifier}; +use crate::dip::did::LinkedDidInfoOf; pub type BlindedValue = Vec; pub type DidMerkleProofOf = DidMerkleProof< @@ -340,16 +343,17 @@ pub mod v0 { pub struct DidMerkleRootGenerator(PhantomData); -impl IdentityCommitmentGenerator> for DidMerkleRootGenerator +impl IdentityCommitmentGenerator for DidMerkleRootGenerator where - Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config, + Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config + pallet_dip_provider::Config, + Runtime::IdentityProvider: IdentityProvider>, { type Error = DidMerkleProofError; - type Output = Runtime::Hash; + type IdentityCommitment = Runtime::Hash; fn generate_commitment( - _identifier: &DidIdentifier, - identity: &LinkedDidInfoOf, + _identifier: &Runtime::Identifier, + identity: &IdentityOf, version: IdentityCommitmentVersion, ) -> Result { match version { From 7ac8f1149702c49f61a5f64483f5162825e57a0a Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 17:19:24 +0100 Subject: [PATCH 25/46] Revert 'Failed attempt at depending on the runtime' This reverts commit 2725e260f4f578575cb039688e3e9c5cbbbc08df. --- Cargo.lock | 3 - crates/kilt-dip-support/Cargo.toml | 6 - crates/kilt-dip-support/src/export/common.rs | 2 +- crates/kilt-dip-support/src/export/mod.rs | 15 +- crates/kilt-dip-support/src/export/sibling.rs | 392 +++++++++++------- dip-template/runtimes/dip-consumer/src/dip.rs | 29 +- .../dip-consumer/src/origin_adapter.rs | 8 +- dip-template/runtimes/dip-provider/src/dip.rs | 9 +- pallets/pallet-dip-provider/src/lib.rs | 1 - runtimes/common/src/dip/did.rs | 42 +- runtimes/common/src/dip/merkle.rs | 18 +- 11 files changed, 309 insertions(+), 216 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6979a81529..abcc85ce85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4534,12 +4534,9 @@ dependencies = [ "hash-db", "hex-literal 0.3.4", "log", - "pallet-did-lookup", "pallet-dip-consumer", "pallet-dip-provider", "pallet-relay-store", - "pallet-web3-names", - "parachain-info", "parity-scale-codec", "rococo-runtime", "scale-info", diff --git a/crates/kilt-dip-support/Cargo.toml b/crates/kilt-dip-support/Cargo.toml index 42126c78ad..b9ba5ff712 100644 --- a/crates/kilt-dip-support/Cargo.toml +++ b/crates/kilt-dip-support/Cargo.toml @@ -17,11 +17,9 @@ log.workspace = true # Internal dependencies did.workspace = true -pallet-did-lookup.workspace = true pallet-dip-consumer.workspace = true pallet-dip-provider.workspace = true pallet-relay-store.workspace = true -pallet-web3-names.workspace = true # Parity dependencies parity-scale-codec = {workspace = true, features = ["derive"]} @@ -44,7 +42,6 @@ xcm-executor.workspace = true # Cumulus dependencies cumulus-pallet-parachain-system.workspace = true -parachain-info.workspace = true [dev-dependencies] hex-literal.workspace = true @@ -56,11 +53,9 @@ std = [ "hash-db/std", "log/std", "did/std", - "pallet-did-lookup/std", "pallet-dip-consumer/std", "pallet-dip-provider/std", "pallet-relay-store/std", - "pallet-web3-names/std", "parity-scale-codec/std", "scale-info/std", "frame-system/std", @@ -75,7 +70,6 @@ std = [ "xcm/std", "xcm-executor/std", "cumulus-pallet-parachain-system/std", - "parachain-info/std", ] runtime-benchmarks = [ "pallet-dip-consumer/runtime-benchmarks", diff --git a/crates/kilt-dip-support/src/export/common.rs b/crates/kilt-dip-support/src/export/common.rs index cc40142ce5..d0eff66d68 100644 --- a/crates/kilt-dip-support/src/export/common.rs +++ b/crates/kilt-dip-support/src/export/common.rs @@ -28,7 +28,7 @@ pub mod v0 { use crate::{did::TimeBoundDidSignature, merkle::DidMerkleProof}; - #[derive(Encode, Decode, PartialEq, Eq, RuntimeDebug, TypeInfo, Clone)] + #[derive(Encode, Decode, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug, TypeInfo, Clone)] pub struct ParachainRootStateProof { pub(crate) relay_block_height: RelayBlockHeight, pub(crate) proof: Vec>, diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index ecb6f9e612..c6a92e7d5b 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -16,20 +16,19 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -// mod child; +mod child; mod common; mod sibling; -// pub use child::{ -// DipChildProviderStateProofVerifierError, -// VersionedChildParachainDipStateProof, -// VersionedDipChildProviderStateProofVerifier, -// }; +pub use child::{ + DipChildProviderStateProofVerifierError, VersionedChildParachainDipStateProof, + VersionedDipChildProviderStateProofVerifier, +}; pub use sibling::{ - DipSiblingProviderStateProofVerifierError, VersionedKiltDipSiblingProviderStateProofVerifier, + DipSiblingProviderStateProofVerifierError, VersionedDipSiblingProviderStateProofVerifier, VersionedSiblingParachainDipStateProof, }; pub mod latest { - pub use super::{common::latest::*, sibling::latest::*}; + pub use super::{child::latest::*, common::latest::*, sibling::latest::*}; } diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index 5c0cb50e70..80cb654e39 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -16,23 +16,19 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; -use frame_support::Parameter; -use frame_system::pallet_prelude::BlockNumberFor; -use pallet_did_lookup::linkable_account::LinkableAccountId; +use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; use pallet_dip_consumer::traits::IdentityProofVerifier; -use pallet_dip_provider::IdentityCommitmentOf; use parity_scale_codec::{Decode, Encode, HasCompact}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, U256}; -use sp_runtime::traits::{CheckedAdd, One, Zero}; +use sp_runtime::traits::{CheckedSub, Get}; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{ did::RevealedDidKeysSignatureAndCallVerifierError, merkle::{DidMerkleProofVerifierError, RevealedDidMerkleProofLeaf, RevealedDidMerkleProofLeaves}, state_proofs::{parachain::DipIdentityCommitmentProofVerifierError, relay_chain::ParachainHeadProofVerifierError}, - traits::{self, DipCallOriginFilter}, + traits::{self, Bump, DidSignatureVerifierContext, DipCallOriginFilter}, utils::OutputOf, }; @@ -109,62 +105,105 @@ where } } -pub struct VersionedKiltDipSiblingProviderStateProofVerifier< - KiltRuntime, +pub struct VersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, - KiltDipMerkleHasher, - LocalDidCallVerifier, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - const DID_SIGNATURE_VALIDITY: u16, + LocalDidDetails, + LocalContextProvider, + LocalDidCallVerifier, >( + #[allow(clippy::type_complexity)] PhantomData<( - KiltRuntime, RelayChainStateInfo, - KiltDipMerkleHasher, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, + LocalDidDetails, + LocalContextProvider, LocalDidCallVerifier, )>, ); impl< - KiltRuntime, - ConsumerRuntime, + Runtime, RelayChainStateInfo, - KiltDipMerkleHasher, - LocalDidCallVerifier, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - const DID_SIGNATURE_VALIDITY: u16, - > IdentityProofVerifier - for VersionedKiltDipSiblingProviderStateProofVerifier< - KiltRuntime, - RelayChainStateInfo, - KiltDipMerkleHasher, + LocalDidDetails, + LocalContextProvider, LocalDidCallVerifier, + > IdentityProofVerifier + for VersionedDipSiblingProviderStateProofVerifier< + RelayChainStateInfo, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - DID_SIGNATURE_VALIDITY, + LocalDidDetails, + LocalContextProvider, + LocalDidCallVerifier, > where - KiltRuntime: did::Config - + pallet_did_lookup::Config - + pallet_web3_names::Config - + pallet_dip_provider::Config - + parachain_info::Config, - OutputOf: Ord + From>, - ConsumerRuntime: pallet_dip_consumer::Config, - ConsumerRuntime::LocalIdentityInfo: Default + CheckedAdd + Zero + One, + Runtime: pallet_dip_consumer::Config, + ::RuntimeCall: Encode, + TxSubmitter: Encode, + RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, - RelayChainStateInfo::BlockNumber: Parameter + Copy + Into + TryFrom + HasCompact, + OutputOf: Ord, + RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, - RelayChainStateInfo::ParaId: From, - KiltDipMerkleHasher: sp_core::Hasher>, + + SiblingProviderParachainId: Get, + + SiblingProviderStateInfo: + traits::ProviderParachainStateInfo, + OutputOf: Ord + From>, + SiblingProviderStateInfo::BlockNumber: Encode + Clone, + SiblingProviderStateInfo::Commitment: Decode, + SiblingProviderStateInfo::Key: AsRef<[u8]>, + + LocalContextProvider: DidSignatureVerifierContext, + LocalContextProvider::BlockNumber: Encode + CheckedSub + From + PartialOrd, + LocalContextProvider::Hash: Encode, + LocalContextProvider::SignedExtra: Encode, + LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, - OriginInfo = ( - DidVerificationKey, - DidVerificationKeyRelationship, - ), + ::RuntimeCall, + OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, + + ProviderDipMerkleHasher: sp_core::Hasher, + ProviderDidKeyId: Encode + Clone + Into, + ProviderAccountId: Encode + Clone, + ProviderLinkedAccountId: Encode + Clone, + ProviderWeb3Name: Encode + Clone, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -176,45 +215,49 @@ impl< RelayChainStateInfo::BlockNumber, Vec>, RevealedDidMerkleProofLeaf< - KeyIdOf, - KiltRuntime::AccountId, - BlockNumberFor, - KiltRuntime::Web3Name, - LinkableAccountId, + ProviderDidKeyId, + ProviderAccountId, + SiblingProviderStateInfo::BlockNumber, + ProviderWeb3Name, + ProviderLinkedAccountId, >, - BlockNumberFor, + LocalContextProvider::BlockNumber, >; type VerificationResult = RevealedDidMerkleProofLeaves< - KeyIdOf, - KiltRuntime::AccountId, - BlockNumberFor, - KiltRuntime::Web3Name, - LinkableAccountId, + ProviderDidKeyId, + ProviderAccountId, + SiblingProviderStateInfo::BlockNumber, + ProviderWeb3Name, + ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &::Identifier, - submitter: &::AccountId, - identity_details: &mut Option<::LocalIdentityInfo>, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { - use v0::KiltDipSiblingProviderStateProofVerifier; - match proof { VersionedSiblingParachainDipStateProof::V0(v0_proof) => { - let a = KiltDipSiblingProviderStateProofVerifier::< - KiltRuntime, - _, - _, - _, + v0::DipSiblingProviderStateProofVerifier::< + RelayChainStateInfo, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - DID_SIGNATURE_VALIDITY, - >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof); - Ok(Default::default()) + LocalDidDetails, + LocalContextProvider, + LocalDidCallVerifier, + >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof) } } } @@ -228,11 +271,7 @@ mod v0 { use super::*; - use did::KeyIdOf; use frame_support::Parameter; - use frame_system::pallet_prelude::BlockNumberFor; - use pallet_did_lookup::linkable_account::LinkableAccountId; - use pallet_dip_provider::IdentityCommitmentOf; use sp_std::borrow::Borrow; use crate::{ @@ -240,7 +279,7 @@ mod v0 { export::common::v0::{DipMerkleProofAndDidSignature, ParachainRootStateProof}, merkle::DidMerkleProofVerifier, state_proofs::{parachain::DipIdentityCommitmentProofVerifier, relay_chain::ParachainHeadProofVerifier}, - FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, + traits::ProviderParachainStateInfo, }; #[derive(Encode, Decode, PartialEq, Eq, RuntimeDebug, TypeInfo, Clone)] @@ -256,62 +295,108 @@ mod v0 { } #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)] - pub struct KiltDipSiblingProviderStateProofVerifier< - KiltRuntime, + pub struct DipSiblingProviderStateProofVerifier< RelayChainStateInfo, - KiltDipMerkleHasher, - LocalDidCallVerifier, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - const DID_SIGNATURE_VALIDITY: u16, + LocalDidDetails, + LocalContextProvider, + LocalDidCallVerifier, >( + #[allow(clippy::type_complexity)] PhantomData<( - KiltRuntime, RelayChainStateInfo, - KiltDipMerkleHasher, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, + LocalDidDetails, + LocalContextProvider, LocalDidCallVerifier, )>, ); impl< - KiltRuntime, - ConsumerRuntime, + Runtime, RelayChainStateInfo, - KiltDipMerkleHasher, - LocalDidCallVerifier, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - const DID_SIGNATURE_VALIDITY: u16, - > IdentityProofVerifier - for KiltDipSiblingProviderStateProofVerifier< - KiltRuntime, - RelayChainStateInfo, - KiltDipMerkleHasher, + LocalDidDetails, + LocalContextProvider, LocalDidCallVerifier, + > IdentityProofVerifier + for DipSiblingProviderStateProofVerifier< + RelayChainStateInfo, + SiblingProviderParachainId, + SiblingProviderStateInfo, + TxSubmitter, + ProviderDipMerkleHasher, + ProviderDidKeyId, + ProviderAccountId, + ProviderWeb3Name, + ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - DID_SIGNATURE_VALIDITY, + LocalDidDetails, + LocalContextProvider, + LocalDidCallVerifier, > where - KiltRuntime: did::Config - + pallet_did_lookup::Config - + pallet_web3_names::Config - + pallet_dip_provider::Config - + parachain_info::Config, - OutputOf: Ord + From>, - ConsumerRuntime: pallet_dip_consumer::Config, - ConsumerRuntime::LocalIdentityInfo: Default + CheckedAdd + Zero + One, + Runtime: pallet_dip_consumer::Config, + ::RuntimeCall: Encode, + Runtime::LocalIdentityInfo: Default, + TxSubmitter: Encode, + RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, - RelayChainStateInfo::BlockNumber: Parameter + Copy + Into + TryFrom + HasCompact, + OutputOf: Ord, + RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact + Parameter, RelayChainStateInfo::Key: AsRef<[u8]>, - RelayChainStateInfo::ParaId: From, - KiltDipMerkleHasher: sp_core::Hasher>, + + SiblingProviderParachainId: Get, + + SiblingProviderStateInfo: traits::ProviderParachainStateInfo< + Identifier = Runtime::Identifier, + Commitment = ProviderDipMerkleHasher::Out, + >, + OutputOf: Ord + From>, + SiblingProviderStateInfo::BlockNumber: Parameter, + SiblingProviderStateInfo::Commitment: Decode, + SiblingProviderStateInfo::Key: AsRef<[u8]>, + + LocalContextProvider: DidSignatureVerifierContext, + LocalContextProvider::BlockNumber: Parameter + CheckedSub + From + PartialOrd, + LocalContextProvider::Hash: Encode, + LocalContextProvider::SignedExtra: Encode, + LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, - OriginInfo = ( - DidVerificationKey, - DidVerificationKeyRelationship, - ), + ::RuntimeCall, + OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, + + ProviderDipMerkleHasher: sp_core::Hasher, + ProviderDidKeyId: Parameter + Into, + ProviderAccountId: Parameter, + ProviderLinkedAccountId: Parameter, + ProviderWeb3Name: Parameter, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -323,53 +408,60 @@ mod v0 { RelayChainStateInfo::BlockNumber, Vec>, RevealedDidMerkleProofLeaf< - KeyIdOf, - KiltRuntime::AccountId, - BlockNumberFor, - KiltRuntime::Web3Name, - LinkableAccountId, + ProviderDidKeyId, + ProviderAccountId, + SiblingProviderStateInfo::BlockNumber, + ProviderWeb3Name, + ProviderLinkedAccountId, >, - BlockNumberFor, + LocalContextProvider::BlockNumber, >; type VerificationResult = RevealedDidMerkleProofLeaves< - KeyIdOf, - KiltRuntime::AccountId, - BlockNumberFor, - KiltRuntime::Web3Name, - LinkableAccountId, + ProviderDidKeyId, + ProviderAccountId, + SiblingProviderStateInfo::BlockNumber, + ProviderWeb3Name, + ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &::Identifier, - submitter: &::AccountId, - identity_details: &mut Option<::LocalIdentityInfo>, + call: &::RuntimeCall, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Verify relay chain proof. let provider_parachain_header = ParachainHeadProofVerifier::::verify_proof_for_parachain( - &u32::from(parachain_info::Pallet::::parachain_id()).into(), + &SiblingProviderParachainId::get(), &proof.para_state_root.relay_block_height, proof.para_state_root.proof, ) .map_err(DipSiblingProviderStateProofVerifierError::ParachainHeadMerkleProof)?; // 2. Verify parachain state proof. - let subject_identity_commitment = DipIdentityCommitmentProofVerifier::< - ProviderParachainStateInfoViaProviderPallet, - >::verify_proof_for_identifier( - subject, - provider_parachain_header.state_root.into(), - proof.dip_identity_commitment, - ) - .map_err(DipSiblingProviderStateProofVerifierError::IdentityCommitmentMerkleProof)?; + let subject_identity_commitment = + DipIdentityCommitmentProofVerifier::::verify_proof_for_identifier( + subject, + provider_parachain_header.state_root.into(), + proof.dip_identity_commitment, + ) + .map_err(DipSiblingProviderStateProofVerifierError::IdentityCommitmentMerkleProof)?; // 3. Verify DIP merkle proof. - let proof_leaves = DidMerkleProofVerifier::< - KiltDipMerkleHasher, + let proof_leaves: RevealedDidMerkleProofLeaves< + ProviderDidKeyId, + ProviderAccountId, + ::BlockNumber, + ProviderWeb3Name, + ProviderLinkedAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + > = DidMerkleProofVerifier::< + ProviderDipMerkleHasher, _, _, _, @@ -382,25 +474,25 @@ mod v0 { // 4. Verify DID signature. RevealedDidKeysSignatureAndCallVerifier::< - _, - _, - _, - _, - FrameSystemDidSignatureContext, - _, - _, - _, - LocalDidCallVerifier, - >::verify_did_signature_for_call( - call, - submitter, - identity_details, - RevealedDidKeysAndSignature { - merkle_leaves: proof_leaves.borrow(), - did_signature: proof.did.signature, - }, - ) - .map_err(DipSiblingProviderStateProofVerifierError::DidSignature)?; + _, + _, + _, + _, + LocalContextProvider, + _, + _, + _, + LocalDidCallVerifier, + >::verify_did_signature_for_call( + call, + submitter, + identity_details, + RevealedDidKeysAndSignature { + merkle_leaves: proof_leaves.borrow(), + did_signature: proof.did.signature, + }, + ) + .map_err(DipSiblingProviderStateProofVerifierError::DidSignature)?; Ok(proof_leaves) } diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 1f44afb2a7..1d6e49c805 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -16,31 +16,46 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{DidVerificationKey, DidVerificationKeyRelationship}; -use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; +use did::{DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime, Web3Name}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedKiltDipSiblingProviderStateProofVerifier, + traits::DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, + RelayStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, }; +use pallet_did_lookup::linkable_account::LinkableAccountId; +use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; use sp_runtime::traits::BlakeTwo256; use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; -pub type ProofVerifier = VersionedKiltDipSiblingProviderStateProofVerifier< - ProviderRuntime, +pub type MerkleProofVerifierOutputOf = + >::VerificationResult; +pub type ProofVerifier = VersionedDipSiblingProviderStateProofVerifier< RelayStateRootsViaRelayStorePallet, + ConstU32<2_000>, + ProviderParachainStateInfoViaProviderPallet, + AccountId, BlakeTwo256, - DipCallFilter, + KeyIdOf, + ProviderAccountId, + Web3Name, + LinkableAccountId, 10, 10, - 50, + u128, + // Signatures are valid for 50 blocks + FrameSystemDidSignatureContext, + DipCallFilter, >; impl pallet_dip_consumer::Config for Runtime { type DipCallOriginFilter = PreliminaryDipOriginFilter; type Identifier = DidIdentifier; + type IdentityProof = >::Proof; type LocalIdentityInfo = u128; + type ProofVerificationError = >::Error; type ProofVerifier = ProofVerifier; type RuntimeCall = RuntimeCall; type RuntimeOrigin = RuntimeOrigin; diff --git a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs index 51dec83fe7..b9d008e5c8 100644 --- a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs +++ b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs @@ -16,9 +16,9 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use crate::{AccountId, DidIdentifier, Runtime, RuntimeOrigin, Web3Name}; +use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutputOf, RuntimeCall, RuntimeOrigin, Web3Name}; use frame_support::traits::EnsureOrigin; -use pallet_dip_consumer::{DipOrigin, EnsureDipOrigin, VerificationResultOf}; +use pallet_dip_consumer::{DipOrigin, EnsureDipOrigin}; use pallet_postit::traits::Usernamable; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; @@ -41,7 +41,9 @@ impl EnsureOrigin for EnsureDipOriginAdapter { } #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct DipOriginAdapter(DipOrigin>); +pub struct DipOriginAdapter( + DipOrigin>, +); impl Usernamable for DipOriginAdapter { type Username = Web3Name; diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 0010249689..12ac28a33b 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -31,7 +31,7 @@ use sp_std::vec::Vec; use crate::{ deposit::{DepositHooks, DepositNamespaces}, - AccountId, Balances, DidIdentifier, Runtime, RuntimeEvent, RuntimeHoldReason, + AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason, }; pub mod runtime_api { @@ -49,7 +49,7 @@ pub mod runtime_api { #[derive(Encode, Decode, TypeInfo)] pub enum DipProofError { IdentityNotFound, - IdentityProviderError( as IdentityProvider>::Error), + IdentityProviderError( as IdentityProvider>::Error), MerkleProofError(DidMerkleProofError), } } @@ -137,11 +137,14 @@ impl pallet_deposit_storage::Config for Runtime { } impl pallet_dip_provider::Config for Runtime { - type CommitOrigin = DidRawOrigin; type CommitOriginCheck = EnsureDidOrigin; + type CommitOrigin = DidRawOrigin; type Identifier = DidIdentifier; + type IdentityCommitment = Hash; type IdentityCommitmentGenerator = DidMerkleRootGenerator; + type IdentityCommitmentGeneratorError = DidMerkleProofError; type IdentityProvider = LinkedDidInfoProviderOf; + type IdentityProviderError = as IdentityProvider>::Error; type ProviderHooks = deposit::DepositCollectorHooks; type RuntimeEvent = RuntimeEvent; } diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 403a352641..0e5dbf9aa6 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -34,7 +34,6 @@ pub mod pallet { use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; pub type IdentityOf = <::IdentityProvider as IdentityProvider>::Identity; - pub type IdentityProviderOf = ::IdentityProvider; pub type IdentityCommitmentOf = <::IdentityCommitmentGenerator as IdentityCommitmentGenerator>::IdentityCommitment; pub type IdentityCommitmentVersion = u16; diff --git a/runtimes/common/src/dip/did.rs b/runtimes/common/src/dip/did.rs index a9aedd8fc1..f4255c438b 100644 --- a/runtimes/common/src/dip/did.rs +++ b/runtimes/common/src/dip/did.rs @@ -45,18 +45,17 @@ impl From for u16 { pub struct DidIdentityProvider(PhantomData); -impl IdentityProvider for DidIdentityProvider +impl IdentityProvider for DidIdentityProvider where - Runtime: - did::Config::Identifier> + pallet_dip_provider::Config, + T: did::Config, { type Error = DidIdentityProviderError; - type Identity = DidDetails; + type Success = DidDetails; - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { + fn retrieve(identifier: &T::DidIdentifier) -> Result, Self::Error> { match ( - did::Pallet::::get_did(identifier), - did::Pallet::::get_deleted_did(identifier), + did::Pallet::::get_did(identifier), + did::Pallet::::get_deleted_did(identifier), ) { (Some(details), _) => Ok(Some(details)), (_, Some(_)) => Ok(None), @@ -65,31 +64,29 @@ where } } -pub type Web3OwnershipOf = - RevealedWeb3Name<::Web3Name, BlockNumberFor>; +pub type Web3OwnershipOf = RevealedWeb3Name<::Web3Name, BlockNumberFor>; pub struct DidWeb3NameProvider(PhantomData); -impl IdentityProvider for DidWeb3NameProvider +impl IdentityProvider for DidWeb3NameProvider where - Runtime: pallet_web3_names::Config::Identifier> - + pallet_dip_provider::Config, + T: pallet_web3_names::Config, { type Error = DidIdentityProviderError; - type Identity = Web3OwnershipOf; + type Success = Web3OwnershipOf; - fn retrieve(identifier: &Runtime::Web3NameOwner) -> Result, Self::Error> { - let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { + fn retrieve(identifier: &T::Web3NameOwner) -> Result, Self::Error> { + let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { return Ok(None); }; - let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { + let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { log::error!( "Inconsistent reverse map pallet_web3_names::owner(web3_name). Cannot find owner for web3name {:#?}", web3_name ); return Err(DidIdentityProviderError::Internal); }; - Ok(Some(Web3OwnershipOf:: { + Ok(Some(Web3OwnershipOf:: { web3_name, claimed_at: details.claimed_at, })) @@ -98,17 +95,16 @@ where pub struct DidLinkedAccountsProvider(PhantomData); -impl IdentityProvider for DidLinkedAccountsProvider +impl IdentityProvider for DidLinkedAccountsProvider where - Runtime: pallet_did_lookup::Config::Identifier> - + pallet_dip_provider::Config, + T: pallet_did_lookup::Config, { type Error = DidIdentityProviderError; - type Identity = Vec; + type Success = Vec; - fn retrieve(identifier: &Runtime::DidIdentifier) -> Result, Self::Error> { + fn retrieve(identifier: &T::DidIdentifier) -> Result, Self::Error> { Ok(Some( - pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), + pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), )) } } diff --git a/runtimes/common/src/dip/merkle.rs b/runtimes/common/src/dip/merkle.rs index 81de954f25..d7af9c87b5 100644 --- a/runtimes/common/src/dip/merkle.rs +++ b/runtimes/common/src/dip/merkle.rs @@ -20,10 +20,7 @@ use frame_support::RuntimeDebug; use frame_system::pallet_prelude::BlockNumberFor; use kilt_dip_support::merkle::{DidKeyMerkleKey, DidKeyMerkleValue, DidMerkleProof}; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_provider::{ - traits::{IdentityCommitmentGenerator, IdentityProvider}, - IdentityCommitmentVersion, IdentityOf, -}; +use pallet_dip_provider::{traits::IdentityCommitmentGenerator, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_std::{borrow::ToOwned, marker::PhantomData, vec::Vec}; @@ -31,7 +28,7 @@ use sp_trie::{generate_trie_proof, LayoutV1, MemoryDB, TrieDBMutBuilder, TrieHas use kilt_dip_support::merkle::{DidKeyRelationship, RevealedDidMerkleProofLeaf}; -use crate::dip::did::LinkedDidInfoOf; +use crate::{dip::did::LinkedDidInfoOf, DidIdentifier}; pub type BlindedValue = Vec; pub type DidMerkleProofOf = DidMerkleProof< @@ -343,17 +340,16 @@ pub mod v0 { pub struct DidMerkleRootGenerator(PhantomData); -impl IdentityCommitmentGenerator for DidMerkleRootGenerator +impl IdentityCommitmentGenerator> for DidMerkleRootGenerator where - Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config + pallet_dip_provider::Config, - Runtime::IdentityProvider: IdentityProvider>, + Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config, { type Error = DidMerkleProofError; - type IdentityCommitment = Runtime::Hash; + type Output = Runtime::Hash; fn generate_commitment( - _identifier: &Runtime::Identifier, - identity: &IdentityOf, + _identifier: &DidIdentifier, + identity: &LinkedDidInfoOf, version: IdentityCommitmentVersion, ) -> Result { match version { From 5b6d74fb63df6e69b96c3dd42fd924d46ce05e9f Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 17:19:33 +0100 Subject: [PATCH 26/46] Revert "WIP trait refactoring" This reverts commit 66ba06ccc87854a4aaeee5aed1748cdc75576b62. --- crates/kilt-dip-support/src/export/child.rs | 49 +++--- crates/kilt-dip-support/src/export/sibling.rs | 69 ++++---- crates/kilt-dip-support/src/lib.rs | 3 +- crates/kilt-dip-support/src/state_proofs.rs | 6 +- crates/kilt-dip-support/src/traits.rs | 4 +- crates/kilt-dip-support/src/utils.rs | 13 +- dip-template/runtimes/dip-consumer/src/dip.rs | 8 +- pallets/did/src/lib.rs | 4 +- pallets/pallet-deposit-storage/src/deposit.rs | 6 +- pallets/pallet-dip-consumer/src/lib.rs | 24 ++- pallets/pallet-dip-consumer/src/traits.rs | 42 +++-- pallets/pallet-dip-provider/src/lib.rs | 27 ++-- pallets/pallet-dip-provider/src/traits.rs | 150 ++++++++---------- 13 files changed, 202 insertions(+), 203 deletions(-) diff --git a/crates/kilt-dip-support/src/export/child.rs b/crates/kilt-dip-support/src/export/child.rs index 060c0f4975..c238080099 100644 --- a/crates/kilt-dip-support/src/export/child.rs +++ b/crates/kilt-dip-support/src/export/child.rs @@ -146,7 +146,8 @@ pub struct VersionedDipChildProviderStateProofVerifier< ); impl< - Runtime, + Call, + Subject, RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, @@ -161,7 +162,7 @@ impl< LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for VersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, @@ -178,8 +179,7 @@ impl< LocalContextProvider, LocalDidCallVerifier, > where - Runtime: pallet_dip_consumer::Config, - ::RuntimeCall: Encode, + Call: Encode, TxSubmitter: Encode, RelayChainInfo: RelayChainStorageInfo @@ -202,8 +202,7 @@ impl< ChildProviderParachainId: Get, - ChildProviderStateInfo: - ProviderParachainStateInfo, + ChildProviderStateInfo: ProviderParachainStateInfo, OutputOf: Ord + From::Hasher>>, ChildProviderStateInfo::BlockNumber: Encode + Clone, ChildProviderStateInfo::Commitment: Decode, @@ -215,10 +214,8 @@ impl< LocalContextProvider::Hash: Encode, LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, - LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, - OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), - >, + LocalDidCallVerifier: + DipCallOriginFilter, DidVerificationKeyRelationship)>, ProviderDipMerkleHasher: sp_core::Hasher, ProviderDidKeyId: Encode + Clone + Into, @@ -232,6 +229,7 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; + type IdentityDetails = LocalDidDetails; type Proof = VersionedChildParachainDipStateProof< ::BlockNumber, ::Hasher, @@ -244,6 +242,7 @@ impl< ProviderLinkedAccountId, >, >; + type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -255,10 +254,10 @@ impl< >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &Call, + subject: &Subject, + submitter: &Self::Submitter, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { @@ -366,7 +365,8 @@ mod v0 { ); impl< - Runtime, + Call, + Subject, RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, @@ -381,7 +381,7 @@ mod v0 { LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for DipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, @@ -398,8 +398,7 @@ mod v0 { LocalContextProvider, LocalDidCallVerifier, > where - Runtime: pallet_dip_consumer::Config, - ::RuntimeCall: Encode, + Call: Encode, TxSubmitter: Encode, RelayChainInfo: RelayChainStorageInfo @@ -423,7 +422,7 @@ mod v0 { ChildProviderParachainId: Get, ChildProviderStateInfo: - ProviderParachainStateInfo, + ProviderParachainStateInfo, OutputOf: Ord + From::Hasher>>, ChildProviderStateInfo::BlockNumber: Encode + Clone, @@ -437,7 +436,7 @@ mod v0 { LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, + Call, OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, @@ -453,6 +452,7 @@ mod v0 { DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; + type IdentityDetails = LocalDidDetails; type Proof = ChildParachainDipStateProof< ::BlockNumber, ::Hasher, @@ -465,6 +465,7 @@ mod v0 { ProviderLinkedAccountId, >, >; + type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -476,10 +477,10 @@ mod v0 { >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &Call, + subject: &Subject, + submitter: &Self::Submitter, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Retrieve block hash from provider at the proof height diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index 80cb654e39..e0b3154c54 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -139,7 +139,8 @@ pub struct VersionedDipSiblingProviderStateProofVerifier< ); impl< - Runtime, + Call, + Subject, RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, @@ -154,7 +155,7 @@ impl< LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for VersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, @@ -171,8 +172,7 @@ impl< LocalContextProvider, LocalDidCallVerifier, > where - Runtime: pallet_dip_consumer::Config, - ::RuntimeCall: Encode, + Call: Encode, TxSubmitter: Encode, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, @@ -183,7 +183,7 @@ impl< SiblingProviderParachainId: Get, SiblingProviderStateInfo: - traits::ProviderParachainStateInfo, + traits::ProviderParachainStateInfo, OutputOf: Ord + From>, SiblingProviderStateInfo::BlockNumber: Encode + Clone, SiblingProviderStateInfo::Commitment: Decode, @@ -194,10 +194,8 @@ impl< LocalContextProvider::Hash: Encode, LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, - LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, - OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), - >, + LocalDidCallVerifier: + DipCallOriginFilter, DidVerificationKeyRelationship)>, ProviderDipMerkleHasher: sp_core::Hasher, ProviderDidKeyId: Encode + Clone + Into, @@ -211,6 +209,7 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; + type IdentityDetails = LocalDidDetails; type Proof = VersionedSiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -223,6 +222,7 @@ impl< >, LocalContextProvider::BlockNumber, >; + type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -234,10 +234,10 @@ impl< >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &Call, + subject: &Subject, + submitter: &Self::Submitter, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { @@ -268,10 +268,8 @@ pub mod latest { } mod v0 { - use super::*; - use frame_support::Parameter; use sp_std::borrow::Borrow; use crate::{ @@ -329,7 +327,8 @@ mod v0 { ); impl< - Runtime, + Call, + Subject, RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, @@ -344,7 +343,7 @@ mod v0 { LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for DipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, @@ -361,42 +360,38 @@ mod v0 { LocalContextProvider, LocalDidCallVerifier, > where - Runtime: pallet_dip_consumer::Config, - ::RuntimeCall: Encode, - Runtime::LocalIdentityInfo: Default, + Call: Encode, TxSubmitter: Encode, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, OutputOf: Ord, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact + Parameter, + RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, SiblingProviderParachainId: Get, - SiblingProviderStateInfo: traits::ProviderParachainStateInfo< - Identifier = Runtime::Identifier, - Commitment = ProviderDipMerkleHasher::Out, - >, + SiblingProviderStateInfo: + traits::ProviderParachainStateInfo, OutputOf: Ord + From>, - SiblingProviderStateInfo::BlockNumber: Parameter, + SiblingProviderStateInfo::BlockNumber: Encode + Clone, SiblingProviderStateInfo::Commitment: Decode, SiblingProviderStateInfo::Key: AsRef<[u8]>, LocalContextProvider: DidSignatureVerifierContext, - LocalContextProvider::BlockNumber: Parameter + CheckedSub + From + PartialOrd, + LocalContextProvider::BlockNumber: Encode + CheckedSub + From + PartialOrd, LocalContextProvider::Hash: Encode, LocalContextProvider::SignedExtra: Encode, LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, + Call, OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Parameter + Into, - ProviderAccountId: Parameter, - ProviderLinkedAccountId: Parameter, - ProviderWeb3Name: Parameter, + ProviderDidKeyId: Encode + Clone + Into, + ProviderAccountId: Encode + Clone, + ProviderLinkedAccountId: Encode + Clone, + ProviderWeb3Name: Encode + Clone, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -404,6 +399,7 @@ mod v0 { DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; + type IdentityDetails = LocalDidDetails; type Proof = SiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -416,6 +412,7 @@ mod v0 { >, LocalContextProvider::BlockNumber, >; + type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -427,10 +424,10 @@ mod v0 { >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &Call, + subject: &Subject, + submitter: &Self::Submitter, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Verify relay chain proof. diff --git a/crates/kilt-dip-support/src/lib.rs b/crates/kilt-dip-support/src/lib.rs index 5681cadc1d..2daacfc640 100644 --- a/crates/kilt-dip-support/src/lib.rs +++ b/crates/kilt-dip-support/src/lib.rs @@ -29,5 +29,4 @@ pub mod utils; mod export; pub use export::*; -pub use state_proofs::relay_chain::RelayStateRootsViaRelayStorePallet; -pub use traits::{FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}; +pub use state_proofs::relay_chain::RococoStateRootsViaRelayStorePallet; diff --git a/crates/kilt-dip-support/src/state_proofs.rs b/crates/kilt-dip-support/src/state_proofs.rs index 0156143ce9..1f4866ab85 100644 --- a/crates/kilt-dip-support/src/state_proofs.rs +++ b/crates/kilt-dip-support/src/state_proofs.rs @@ -166,9 +166,9 @@ pub(super) mod relay_chain { } } - pub struct RelayStateRootsViaRelayStorePallet(PhantomData); + pub struct RococoStateRootsViaRelayStorePallet(PhantomData); - impl RelayChainStorageInfo for RelayStateRootsViaRelayStorePallet + impl RelayChainStorageInfo for RococoStateRootsViaRelayStorePallet where Runtime: pallet_relay_store::Config, { @@ -190,7 +190,7 @@ pub(super) mod relay_chain { } } - impl RelayChainStateInfo for RelayStateRootsViaRelayStorePallet + impl RelayChainStateInfo for RococoStateRootsViaRelayStorePallet where Runtime: pallet_relay_store::Config, { diff --git a/crates/kilt-dip-support/src/traits.rs b/crates/kilt-dip-support/src/traits.rs index aa426aae17..d3c013b1b5 100644 --- a/crates/kilt-dip-support/src/traits.rs +++ b/crates/kilt-dip-support/src/traits.rs @@ -17,7 +17,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org use frame_system::pallet_prelude::BlockNumberFor; -use pallet_dip_provider::{IdentityCommitmentOf, IdentityCommitmentVersion}; +use pallet_dip_provider::IdentityCommitmentVersion; use sp_core::storage::StorageKey; use sp_runtime::traits::{CheckedAdd, One, Zero}; use sp_std::marker::PhantomData; @@ -87,7 +87,7 @@ where T: pallet_dip_provider::Config, { type BlockNumber = BlockNumberFor; - type Commitment = IdentityCommitmentOf; + type Commitment = T::IdentityCommitment; type Hasher = T::Hashing; type Identifier = T::Identifier; type Key = StorageKey; diff --git a/crates/kilt-dip-support/src/utils.rs b/crates/kilt-dip-support/src/utils.rs index 68eee19a63..30d2d01d50 100644 --- a/crates/kilt-dip-support/src/utils.rs +++ b/crates/kilt-dip-support/src/utils.rs @@ -105,17 +105,16 @@ where } } -impl IdentityProvider for CombineIdentityFrom +impl IdentityProvider for CombineIdentityFrom where - Runtime: pallet_dip_provider::Config, - A: IdentityProvider, - B: IdentityProvider, - C: IdentityProvider, + A: IdentityProvider, + B: IdentityProvider, + C: IdentityProvider, { type Error = CombineError; - type Identity = CombinedIdentityResult, Option, Option>; + type Success = CombinedIdentityResult, Option, Option>; - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { + fn retrieve(identifier: &Identifier) -> Result, Self::Error> { match ( A::retrieve(identifier), B::retrieve(identifier), diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 1d6e49c805..91ca198c50 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -16,12 +16,12 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime, Web3Name}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, - RelayStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, + traits::{DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}, + RococoStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, }; use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; @@ -33,7 +33,7 @@ use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutputOf = >::VerificationResult; pub type ProofVerifier = VersionedDipSiblingProviderStateProofVerifier< - RelayStateRootsViaRelayStorePallet, + RococoStateRootsViaRelayStorePallet, ConstU32<2_000>, ProviderParachainStateInfoViaProviderPallet, AccountId, diff --git a/pallets/did/src/lib.rs b/pallets/did/src/lib.rs index 8c0e112b7b..1de019e94b 100644 --- a/pallets/did/src/lib.rs +++ b/pallets/did/src/lib.rs @@ -107,8 +107,8 @@ pub use crate::{ default_weights::WeightInfo, did_details::{ DeriveDidCallAuthorizationVerificationKeyRelationship, DeriveDidCallKeyRelationshipResult, - DidAuthorizedCallOperationWithVerificationRelationship, DidSignature, DidVerificationKey, - DidVerificationKeyRelationship, RelationshipDeriveError, + DidAuthorizedCallOperationWithVerificationRelationship, DidSignature, DidVerificationKeyRelationship, + RelationshipDeriveError, }, origin::{DidRawOrigin, EnsureDidOrigin}, pallet::*, diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index c01296e23e..a76acce619 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -24,7 +24,7 @@ use frame_support::{ }, }; use kilt_support::Deposit; -use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentOf, IdentityCommitmentVersion}; +use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::traits::Get; @@ -74,7 +74,7 @@ where fn on_identity_committed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - _commitment: &IdentityCommitmentOf, + _commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); @@ -111,7 +111,7 @@ where fn on_commitment_removed( identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &IdentityCommitmentOf, + _commitment: &Runtime::IdentityCommitment, version: pallet_dip_provider::IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index d29168e77d..c513bbc130 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -39,8 +39,10 @@ pub mod pallet { use crate::traits::IdentityProofVerifier; - pub type ProofOf = <::ProofVerifier as IdentityProofVerifier>::Proof; - pub type VerificationResultOf = <::ProofVerifier as IdentityProofVerifier>::VerificationResult; + pub type VerificationResultOf = <::ProofVerifier as IdentityProofVerifier< + ::RuntimeCall, + ::Identifier, + >>::VerificationResult; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); @@ -56,11 +58,25 @@ pub mod pallet { type DipCallOriginFilter: Contains<::RuntimeCall>; /// The identifier of a subject, e.g., a DID. type Identifier: Parameter + MaxEncodedLen; + /// The proof users must provide to operate with their higher-level + /// identity. Depending on the use cases, this proof can contain + /// heterogeneous bits of information that the proof verifier will + /// utilize. For instance, a proof could contain both a Merkle proof and + /// a DID signature. + type IdentityProof: Parameter; /// The details stored in this pallet associated with any given subject. type LocalIdentityInfo: FullCodec + TypeInfo + MaxEncodedLen; + type ProofVerificationError: Into; /// The logic of the proof verifier, called upon each execution of the /// `dispatch_as` extrinsic. - type ProofVerifier: IdentityProofVerifier; + type ProofVerifier: IdentityProofVerifier< + ::RuntimeCall, + Self::Identifier, + Error = Self::ProofVerificationError, + Proof = Self::IdentityProof, + IdentityDetails = Self::LocalIdentityInfo, + Submitter = ::AccountId, + >; /// The overarching runtime call type. type RuntimeCall: Parameter + Dispatchable::RuntimeOrigin>; /// The overarching runtime origin type. @@ -96,7 +112,7 @@ pub mod pallet { pub fn dispatch_as( origin: OriginFor, identifier: T::Identifier, - proof: ProofOf, + proof: T::IdentityProof, call: Box<::RuntimeCall>, ) -> DispatchResult { // TODO: Make origin check configurable, and require that it at least returns diff --git a/pallets/pallet-dip-consumer/src/traits.rs b/pallets/pallet-dip-consumer/src/traits.rs index f17148e6b3..0b7fa2a85c 100644 --- a/pallets/pallet-dip-consumer/src/traits.rs +++ b/pallets/pallet-dip-consumer/src/traits.rs @@ -16,44 +16,40 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use frame_support::Parameter; use sp_std::marker::PhantomData; -use crate::Config; - -pub trait IdentityProofVerifier -where - Runtime: Config, -{ - type Error: Into; - type Proof: Parameter; +pub trait IdentityProofVerifier { + type Error; + type IdentityDetails; + type Proof; + type Submitter; type VerificationResult; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &Runtime::Identifier, - submitter: &Runtime::AccountId, - identity_details: &mut Option, + call: &Call, + subject: &Subject, + submitter: &Self::Submitter, + identity_details: &mut Option, proof: Self::Proof, ) -> Result; } // Always returns success. -pub struct SuccessfulProofVerifier(PhantomData); -impl IdentityProofVerifier for SuccessfulProofVerifier -where - Runtime: Config, - Proof: Parameter, +pub struct SuccessfulProofVerifier(PhantomData<(IdentityDetails, Proof, Submitter)>); +impl IdentityProofVerifier + for SuccessfulProofVerifier { - type Error = u16; + type Error = (); + type IdentityDetails = IdentityDetails; type Proof = Proof; + type Submitter = Submitter; type VerificationResult = (); fn verify_proof_for_call_against_details( - _call: &::RuntimeCall, - _subject: &Runtime::Identifier, - _submitter: &Runtime::AccountId, - _identity_details: &mut Option, + _call: &Call, + _subject: &Subject, + _submitter: &Self::Submitter, + _identity_details: &mut Option, _proof: Self::Proof, ) -> Result { Ok(()) diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 0e5dbf9aa6..f01b78c52e 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -30,12 +30,13 @@ pub mod pallet { use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; + use parity_scale_codec::FullCodec; + use sp_std::fmt::Debug; use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; - pub type IdentityOf = <::IdentityProvider as IdentityProvider>::Identity; - pub type IdentityCommitmentOf = - <::IdentityCommitmentGenerator as IdentityCommitmentGenerator>::IdentityCommitment; + pub type IdentityProviderOf = ::IdentityProvider; + pub type IdentityOf = <::IdentityProvider as IdentityProvider<::Identifier>>::Success; pub type IdentityCommitmentVersion = u16; pub const LATEST_COMMITMENT_VERSION: IdentityCommitmentVersion = 0; @@ -44,10 +45,18 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config { type CommitOriginCheck: EnsureOrigin; - type CommitOrigin: SubmitterInfo; + type CommitOrigin: SubmitterInfo; type Identifier: Parameter + MaxEncodedLen; - type IdentityCommitmentGenerator: IdentityCommitmentGenerator; - type IdentityProvider: IdentityProvider; + type IdentityCommitment: Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen; + type IdentityCommitmentGenerator: IdentityCommitmentGenerator< + Self::Identifier, + IdentityOf, + Error = Self::IdentityCommitmentGeneratorError, + Output = Self::IdentityCommitment, + >; + type IdentityCommitmentGeneratorError: Into; + type IdentityProvider: IdentityProvider; + type IdentityProviderError: Into; type ProviderHooks: ProviderHooks; type RuntimeEvent: From> + IsType<::RuntimeEvent>; } @@ -60,7 +69,7 @@ pub mod pallet { ::Identifier, Twox64Concat, IdentityCommitmentVersion, - IdentityCommitmentOf, + ::IdentityCommitment, >; #[pallet::pallet] @@ -72,7 +81,7 @@ pub mod pallet { pub enum Event { IdentityCommitted { identifier: T::Identifier, - commitment: IdentityCommitmentOf, + commitment: T::IdentityCommitment, version: IdentityCommitmentVersion, }, VersionedIdentityDeleted { @@ -166,7 +175,7 @@ pub mod pallet { pub fn delete_identity_commitment_storage_entry( identifier: &T::Identifier, version: IdentityCommitmentVersion, - ) -> Result, DispatchError> { + ) -> Result { let commitment = IdentityCommitments::::take(identifier, version).ok_or(Error::::IdentityNotFound)?; Self::deposit_event(Event::::VersionedIdentityDeleted { identifier: identifier.clone(), diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 98ce555775..52785c8ad0 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -19,36 +19,69 @@ use did::DidRawOrigin; use frame_support::sp_runtime::AccountId32; -use crate::{Config, IdentityCommitmentOf, IdentityCommitmentVersion}; +use crate::{Config, IdentityCommitmentVersion}; -pub use identity_provision::*; -pub mod identity_provision { +pub use identity_generation::*; +pub mod identity_generation { use super::*; use sp_std::marker::PhantomData; - pub trait IdentityProvider + pub trait IdentityCommitmentGenerator { + type Error; + type Output; + + fn generate_commitment( + identifier: &Identifier, + identity: &Identity, + version: IdentityCommitmentVersion, + ) -> Result; + } + + // Implement the `IdentityCommitmentGenerator` by returning the `Default` value + // for the `Output` type. + pub struct DefaultIdentityCommitmentGenerator(PhantomData); + + impl IdentityCommitmentGenerator + for DefaultIdentityCommitmentGenerator where - Runtime: Config, + Output: Default, { - type Error: Into; - type Identity; + type Error = (); + type Output = Output; + + fn generate_commitment( + _identifier: &Identifier, + _identity: &Identity, + _version: IdentityCommitmentVersion, + ) -> Result { + Ok(Output::default()) + } + } +} - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error>; +pub use identity_provision::*; +pub mod identity_provision { + use sp_std::marker::PhantomData; + + pub trait IdentityProvider { + type Error; + type Success; + + fn retrieve(identifier: &Identifier) -> Result, Self::Error>; } // Return the `Default` value if `Identity` adn `Details` both implement it. pub struct DefaultIdentityProvider(PhantomData); - impl IdentityProvider for DefaultIdentityProvider + impl IdentityProvider for DefaultIdentityProvider where - Runtime: Config, Identity: Default, { - type Error = u16; - type Identity = Identity; + type Error = (); + type Success = Identity; - fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { + fn retrieve(_identifier: &Identifier) -> Result, Self::Error> { Ok(Some(Identity::default())) } } @@ -56,88 +89,37 @@ pub mod identity_provision { // Always return `None`. Might be useful for tests. pub struct NoneIdentityProvider; - impl IdentityProvider for NoneIdentityProvider - where - Runtime: Config, - { - type Error = u16; - type Identity = (); + impl IdentityProvider for NoneIdentityProvider { + type Error = (); + type Success = (); - fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { + fn retrieve(_identifier: &Identifier) -> Result, Self::Error> { Ok(None) } } } -pub use identity_generation::*; -pub mod identity_generation { - use super::*; - - use parity_scale_codec::{FullCodec, MaxEncodedLen}; - use scale_info::TypeInfo; - use sp_std::{fmt::Debug, marker::PhantomData}; - - use crate::IdentityOf; - - pub trait IdentityCommitmentGenerator - where - Runtime: Config, - { - type Error: Into; - type IdentityCommitment: Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen; - - fn generate_commitment( - identifier: &Runtime::Identifier, - identity: &IdentityOf, - version: IdentityCommitmentVersion, - ) -> Result; - } - - // Implement the `IdentityCommitmentGenerator` by returning the `Default` value - // for the `Output` type. - pub struct DefaultIdentityCommitmentGenerator(PhantomData); - - impl IdentityCommitmentGenerator for DefaultIdentityCommitmentGenerator - where - Runtime: Config, - Runtime::IdentityProvider: IdentityProvider, - Output: Default + Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen, - { - type Error = u16; - type IdentityCommitment = Output; +pub trait SubmitterInfo { + type Submitter; - fn generate_commitment( - _identifier: &Runtime::Identifier, - _identity: &IdentityOf, - _version: IdentityCommitmentVersion, - ) -> Result { - Ok(Output::default()) - } - } + fn submitter(&self) -> Self::Submitter; } -pub trait SubmitterInfo -where - Runtime: Config, -{ - fn submitter(&self) -> Runtime::AccountId; -} +impl SubmitterInfo for AccountId32 { + type Submitter = Self; -impl SubmitterInfo for AccountId32 -where - Runtime: Config, - Runtime::AccountId: From, -{ - fn submitter(&self) -> Runtime::AccountId { - self.clone().into() + fn submitter(&self) -> Self::Submitter { + self.clone() } } -impl SubmitterInfo for DidRawOrigin +impl SubmitterInfo for DidRawOrigin where - Runtime: Config, + AccountId: Clone, { - fn submitter(&self) -> Runtime::AccountId { + type Submitter = AccountId; + + fn submitter(&self) -> Self::Submitter { self.submitter.clone() } } @@ -151,14 +133,14 @@ where fn on_identity_committed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - commitment: &IdentityCommitmentOf, + commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error>; fn on_commitment_removed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - commitment: &IdentityCommitmentOf, + commitment: &Runtime::IdentityCommitment, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error>; } @@ -174,7 +156,7 @@ where fn on_commitment_removed( _identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &IdentityCommitmentOf, + _commitment: &Runtime::IdentityCommitment, _version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { Ok(()) @@ -183,7 +165,7 @@ where fn on_identity_committed( _identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &IdentityCommitmentOf, + _commitment: &Runtime::IdentityCommitment, _version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { Ok(()) From 25a38ffb4243ab7d6259081f8f96656e81111dc6 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 17:21:41 +0100 Subject: [PATCH 27/46] Re-export traits from pallet crate root --- pallets/pallet-deposit-storage/src/lib.rs | 1 + pallets/pallet-dip-consumer/src/lib.rs | 1 + pallets/pallet-dip-provider/src/lib.rs | 1 + 3 files changed, 3 insertions(+) diff --git a/pallets/pallet-deposit-storage/src/lib.rs b/pallets/pallet-deposit-storage/src/lib.rs index 2674923442..e683b27eac 100644 --- a/pallets/pallet-deposit-storage/src/lib.rs +++ b/pallets/pallet-deposit-storage/src/lib.rs @@ -24,6 +24,7 @@ pub mod traits; pub use deposit::FixedDepositCollectorViaDepositsPallet; pub use pallet::*; +pub use traits::NoopDepositStorageHooks; #[frame_support::pallet(dev_mode)] pub mod pallet { diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index c513bbc130..7044646673 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -26,6 +26,7 @@ pub mod traits; mod origin; pub use crate::{origin::*, pallet::*}; +pub use traits::SuccessfulProofVerifier; #[frame_support::pallet(dev_mode)] pub mod pallet { diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index f01b78c52e..65a68d4f83 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -23,6 +23,7 @@ pub mod traits; pub use crate::pallet::*; +pub use traits::{DefaultIdentityCommitmentGenerator, DefaultIdentityProvider, NoneIdentityProvider, NoopHooks}; #[frame_support::pallet(dev_mode)] pub mod pallet { From c083216e7220da7d52d9b2333cd2fc8d8bcf37f8 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 17:22:14 +0100 Subject: [PATCH 28/46] Rename Rococo to generic Relay --- crates/kilt-dip-support/src/lib.rs | 2 +- crates/kilt-dip-support/src/state_proofs.rs | 6 +++--- dip-template/runtimes/dip-consumer/src/dip.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/kilt-dip-support/src/lib.rs b/crates/kilt-dip-support/src/lib.rs index 2daacfc640..3cf21146c7 100644 --- a/crates/kilt-dip-support/src/lib.rs +++ b/crates/kilt-dip-support/src/lib.rs @@ -29,4 +29,4 @@ pub mod utils; mod export; pub use export::*; -pub use state_proofs::relay_chain::RococoStateRootsViaRelayStorePallet; +pub use state_proofs::relay_chain::RelayStateRootsViaRelayStorePallet; diff --git a/crates/kilt-dip-support/src/state_proofs.rs b/crates/kilt-dip-support/src/state_proofs.rs index 1f4866ab85..0156143ce9 100644 --- a/crates/kilt-dip-support/src/state_proofs.rs +++ b/crates/kilt-dip-support/src/state_proofs.rs @@ -166,9 +166,9 @@ pub(super) mod relay_chain { } } - pub struct RococoStateRootsViaRelayStorePallet(PhantomData); + pub struct RelayStateRootsViaRelayStorePallet(PhantomData); - impl RelayChainStorageInfo for RococoStateRootsViaRelayStorePallet + impl RelayChainStorageInfo for RelayStateRootsViaRelayStorePallet where Runtime: pallet_relay_store::Config, { @@ -190,7 +190,7 @@ pub(super) mod relay_chain { } } - impl RelayChainStateInfo for RococoStateRootsViaRelayStorePallet + impl RelayChainStateInfo for RelayStateRootsViaRelayStorePallet where Runtime: pallet_relay_store::Config, { diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 91ca198c50..a9de1472f4 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -21,7 +21,7 @@ use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as P use frame_support::traits::Contains; use kilt_dip_support::{ traits::{DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}, - RococoStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, + RelayStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, }; use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; @@ -33,7 +33,7 @@ use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutputOf = >::VerificationResult; pub type ProofVerifier = VersionedDipSiblingProviderStateProofVerifier< - RococoStateRootsViaRelayStorePallet, + RelayStateRootsViaRelayStorePallet, ConstU32<2_000>, ProviderParachainStateInfoViaProviderPallet, AccountId, From 4485114503891dd1225d0a051ecda738708d684f Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 17:24:34 +0100 Subject: [PATCH 29/46] Better exports in kilt-dip-support crate --- crates/kilt-dip-support/src/lib.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/kilt-dip-support/src/lib.rs b/crates/kilt-dip-support/src/lib.rs index 3cf21146c7..0322801680 100644 --- a/crates/kilt-dip-support/src/lib.rs +++ b/crates/kilt-dip-support/src/lib.rs @@ -29,4 +29,8 @@ pub mod utils; mod export; pub use export::*; -pub use state_proofs::relay_chain::RelayStateRootsViaRelayStorePallet; +pub use state_proofs::{ + parachain::{DipIdentityCommitmentProofVerifier, DipIdentityCommitmentProofVerifierError}, + relay_chain::{ParachainHeadProofVerifier, ParachainHeadProofVerifierError, RelayStateRootsViaRelayStorePallet}, +}; +pub use traits::{FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}; From 9c070bfa82c24a91e9a3a619304a92a9667f49fc Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 7 Nov 2023 18:03:07 +0100 Subject: [PATCH 30/46] Export KILT provider type --- Cargo.lock | 4 + crates/kilt-dip-support/Cargo.toml | 8 + crates/kilt-dip-support/src/export/mod.rs | 2 +- crates/kilt-dip-support/src/export/sibling.rs | 147 +++++++++++++++++- dip-template/runtimes/dip-consumer/src/dip.rs | 27 ++-- 5 files changed, 166 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abcc85ce85..ca9bc7a55e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4528,15 +4528,19 @@ name = "kilt-dip-support" version = "1.12.0-dev" dependencies = [ "cumulus-pallet-parachain-system", + "cumulus-primitives-core", "did", "frame-support", "frame-system", "hash-db", "hex-literal 0.3.4", "log", + "pallet-did-lookup", "pallet-dip-consumer", "pallet-dip-provider", "pallet-relay-store", + "pallet-web3-names", + "parachain-info", "parity-scale-codec", "rococo-runtime", "scale-info", diff --git a/crates/kilt-dip-support/Cargo.toml b/crates/kilt-dip-support/Cargo.toml index b9ba5ff712..d9d6048840 100644 --- a/crates/kilt-dip-support/Cargo.toml +++ b/crates/kilt-dip-support/Cargo.toml @@ -17,9 +17,11 @@ log.workspace = true # Internal dependencies did.workspace = true +pallet-did-lookup.workspace = true pallet-dip-consumer.workspace = true pallet-dip-provider.workspace = true pallet-relay-store.workspace = true +pallet-web3-names.workspace = true # Parity dependencies parity-scale-codec = {workspace = true, features = ["derive"]} @@ -42,6 +44,8 @@ xcm-executor.workspace = true # Cumulus dependencies cumulus-pallet-parachain-system.workspace = true +cumulus-primitives-core.workspace = true +parachain-info.workspace = true [dev-dependencies] hex-literal.workspace = true @@ -53,9 +57,11 @@ std = [ "hash-db/std", "log/std", "did/std", + "pallet-did-lookup/std", "pallet-dip-consumer/std", "pallet-dip-provider/std", "pallet-relay-store/std", + "pallet-web3-names/std", "parity-scale-codec/std", "scale-info/std", "frame-system/std", @@ -70,6 +76,8 @@ std = [ "xcm/std", "xcm-executor/std", "cumulus-pallet-parachain-system/std", + "cumulus-primitives-core/std", + "parachain-info/std", ] runtime-benchmarks = [ "pallet-dip-consumer/runtime-benchmarks", diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index c6a92e7d5b..5c8473cd8c 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -25,7 +25,7 @@ pub use child::{ VersionedDipChildProviderStateProofVerifier, }; pub use sibling::{ - DipSiblingProviderStateProofVerifierError, VersionedDipSiblingProviderStateProofVerifier, + DipSiblingProviderStateProofVerifierError, VersionedSiblingKiltProviderVerifier, VersionedSiblingParachainDipStateProof, }; diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index e0b3154c54..e0234b6492 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -16,7 +16,10 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; +use cumulus_primitives_core::ParaId; +use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use frame_system::pallet_prelude::BlockNumberFor; +use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; use parity_scale_codec::{Decode, Encode, HasCompact}; use scale_info::TypeInfo; @@ -30,6 +33,7 @@ use crate::{ state_proofs::{parachain::DipIdentityCommitmentProofVerifierError, relay_chain::ParachainHeadProofVerifierError}, traits::{self, Bump, DidSignatureVerifierContext, DipCallOriginFilter}, utils::OutputOf, + FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, }; #[derive(Encode, Decode, PartialEq, Eq, RuntimeDebug, TypeInfo, Clone)] @@ -105,7 +109,144 @@ where } } -pub struct VersionedDipSiblingProviderStateProofVerifier< +struct KiltParachainId(PhantomData<(Runtime, Id)>); + +impl Get for KiltParachainId +where + Runtime: parachain_info::Config, + Id: From, +{ + fn get() -> Id { + parachain_info::Pallet::::parachain_id().into() + } +} + +pub struct VersionedSiblingKiltProviderVerifier< + KiltRuntime, + ConsumerRuntime, + RelayChainStateInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + const MAX_REVEALED_KEYS_COUNT: u32, + const MAX_REVEALED_ACCOUNTS_COUNT: u32, + const MAX_DID_SIGNATURE_DURATION: u16, +>( + PhantomData<( + KiltRuntime, + ConsumerRuntime, + RelayChainStateInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + )>, +); + +impl< + KiltRuntime, + ConsumerRuntime, + RelayChainStateInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + const MAX_REVEALED_KEYS_COUNT: u32, + const MAX_REVEALED_ACCOUNTS_COUNT: u32, + const MAX_DID_SIGNATURE_DURATION: u16, + > + IdentityProofVerifier< + ::RuntimeCall, + ::DidIdentifier, + > + for VersionedSiblingKiltProviderVerifier< + KiltRuntime, + ConsumerRuntime, + RelayChainStateInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + MAX_DID_SIGNATURE_DURATION, + > where + KiltRuntime: did::Config + + pallet_web3_names::Config + + pallet_did_lookup::Config + + parachain_info::Config + + pallet_dip_provider::Config::DidIdentifier>, + OutputOf: Ord + From>, + KeyIdOf: Into, + KiltDipMerkleHasher: sp_core::Hasher, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Bump + Default + Encode, + RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, + RelayChainStateInfo::ParaId: From, + RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, + RelayChainStateInfo::Key: AsRef<[u8]>, + LocalDidCallVerifier: DipCallOriginFilter< + ::RuntimeCall, + OriginInfo = ( + DidVerificationKey, + DidVerificationKeyRelationship, + ), + >, +{ + type Error = DipSiblingProviderStateProofVerifierError< + ParachainHeadProofVerifierError, + DipIdentityCommitmentProofVerifierError, + DidMerkleProofVerifierError, + RevealedDidKeysSignatureAndCallVerifierError, + >; + type IdentityDetails = ConsumerRuntime::LocalIdentityInfo; + type Proof = VersionedSiblingParachainDipStateProof< + RelayChainStateInfo::BlockNumber, + Vec>, + RevealedDidMerkleProofLeaf< + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, + >, + BlockNumberFor, + >; + type Submitter = ConsumerRuntime::AccountId; + type VerificationResult = RevealedDidMerkleProofLeaves< + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + >; + + fn verify_proof_for_call_against_details( + call: &::RuntimeCall, + subject: &::DidIdentifier, + submitter: &Self::Submitter, + identity_details: &mut Option, + proof: Self::Proof, + ) -> Result { + match proof { + VersionedSiblingParachainDipStateProof::V0(v0_proof) => { + v0::DipSiblingProviderStateProofVerifier::< + RelayChainStateInfo, + KiltParachainId, + ProviderParachainStateInfoViaProviderPallet, + ConsumerRuntime::AccountId, + KiltDipMerkleHasher, + KeyIdOf, + KiltRuntime::AccountId, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + ConsumerRuntime::LocalIdentityInfo, + FrameSystemDidSignatureContext, + LocalDidCallVerifier, + >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof) + } + } + } +} + +pub struct GenericVersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, @@ -156,7 +297,7 @@ impl< LocalContextProvider, LocalDidCallVerifier, > IdentityProofVerifier - for VersionedDipSiblingProviderStateProofVerifier< + for GenericVersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index a9de1472f4..754235a78f 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -16,38 +16,29 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; -use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime, Web3Name}; +use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; +use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::{DipCallOriginFilter, FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet}, - RelayStateRootsViaRelayStorePallet, VersionedDipSiblingProviderStateProofVerifier, + traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedSiblingKiltProviderVerifier, }; -use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; use sp_runtime::traits::BlakeTwo256; -use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; +use crate::{DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutputOf = >::VerificationResult; -pub type ProofVerifier = VersionedDipSiblingProviderStateProofVerifier< +pub type ProofVerifier = VersionedSiblingKiltProviderVerifier< + ProviderRuntime, + Runtime, RelayStateRootsViaRelayStorePallet, - ConstU32<2_000>, - ProviderParachainStateInfoViaProviderPallet, - AccountId, BlakeTwo256, - KeyIdOf, - ProviderAccountId, - Web3Name, - LinkableAccountId, + DipCallFilter, 10, 10, - u128, - // Signatures are valid for 50 blocks - FrameSystemDidSignatureContext, - DipCallFilter, + 50, >; impl pallet_dip_consumer::Config for Runtime { From 3b8f95a3c74e004654c501e81b18964495f0c19a Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 11:04:17 +0100 Subject: [PATCH 31/46] Refactor provider pallet --- pallets/pallet-dip-provider/src/lib.rs | 24 ++--- pallets/pallet-dip-provider/src/traits.rs | 119 ++++++++++++---------- 2 files changed, 76 insertions(+), 67 deletions(-) diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index 65a68d4f83..f3020f6ee2 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -31,13 +31,13 @@ pub mod pallet { use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; - use parity_scale_codec::FullCodec; - use sp_std::fmt::Debug; use crate::traits::{IdentityCommitmentGenerator, IdentityProvider, ProviderHooks, SubmitterInfo}; + pub type IdentityCommitmentOf = + <::IdentityCommitmentGenerator as IdentityCommitmentGenerator>::Output; pub type IdentityProviderOf = ::IdentityProvider; - pub type IdentityOf = <::IdentityProvider as IdentityProvider<::Identifier>>::Success; + pub type IdentityOf = <::IdentityProvider as IdentityProvider>::Success; pub type IdentityCommitmentVersion = u16; pub const LATEST_COMMITMENT_VERSION: IdentityCommitmentVersion = 0; @@ -48,16 +48,8 @@ pub mod pallet { type CommitOriginCheck: EnsureOrigin; type CommitOrigin: SubmitterInfo; type Identifier: Parameter + MaxEncodedLen; - type IdentityCommitment: Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen; - type IdentityCommitmentGenerator: IdentityCommitmentGenerator< - Self::Identifier, - IdentityOf, - Error = Self::IdentityCommitmentGeneratorError, - Output = Self::IdentityCommitment, - >; - type IdentityCommitmentGeneratorError: Into; - type IdentityProvider: IdentityProvider; - type IdentityProviderError: Into; + type IdentityCommitmentGenerator: IdentityCommitmentGenerator; + type IdentityProvider: IdentityProvider; type ProviderHooks: ProviderHooks; type RuntimeEvent: From> + IsType<::RuntimeEvent>; } @@ -70,7 +62,7 @@ pub mod pallet { ::Identifier, Twox64Concat, IdentityCommitmentVersion, - ::IdentityCommitment, + IdentityCommitmentOf, >; #[pallet::pallet] @@ -82,7 +74,7 @@ pub mod pallet { pub enum Event { IdentityCommitted { identifier: T::Identifier, - commitment: T::IdentityCommitment, + commitment: IdentityCommitmentOf, version: IdentityCommitmentVersion, }, VersionedIdentityDeleted { @@ -176,7 +168,7 @@ pub mod pallet { pub fn delete_identity_commitment_storage_entry( identifier: &T::Identifier, version: IdentityCommitmentVersion, - ) -> Result { + ) -> Result, DispatchError> { let commitment = IdentityCommitments::::take(identifier, version).ok_or(Error::::IdentityNotFound)?; Self::deposit_event(Event::::VersionedIdentityDeleted { identifier: identifier.clone(), diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 52785c8ad0..91a892fab0 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -19,69 +19,36 @@ use did::DidRawOrigin; use frame_support::sp_runtime::AccountId32; -use crate::{Config, IdentityCommitmentVersion}; +use crate::{Config, IdentityCommitmentOf, IdentityCommitmentVersion}; -pub use identity_generation::*; -pub mod identity_generation { +pub use identity_provision::*; +pub mod identity_provision { use super::*; use sp_std::marker::PhantomData; - pub trait IdentityCommitmentGenerator { - type Error; - type Output; - - fn generate_commitment( - identifier: &Identifier, - identity: &Identity, - version: IdentityCommitmentVersion, - ) -> Result; - } - - // Implement the `IdentityCommitmentGenerator` by returning the `Default` value - // for the `Output` type. - pub struct DefaultIdentityCommitmentGenerator(PhantomData); - - impl IdentityCommitmentGenerator - for DefaultIdentityCommitmentGenerator + pub trait IdentityProvider where - Output: Default, + Runtime: Config, { - type Error = (); - type Output = Output; - - fn generate_commitment( - _identifier: &Identifier, - _identity: &Identity, - _version: IdentityCommitmentVersion, - ) -> Result { - Ok(Output::default()) - } - } -} - -pub use identity_provision::*; -pub mod identity_provision { - use sp_std::marker::PhantomData; - - pub trait IdentityProvider { - type Error; + type Error: Into; type Success; - fn retrieve(identifier: &Identifier) -> Result, Self::Error>; + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error>; } // Return the `Default` value if `Identity` adn `Details` both implement it. pub struct DefaultIdentityProvider(PhantomData); - impl IdentityProvider for DefaultIdentityProvider + impl IdentityProvider for DefaultIdentityProvider where + Runtime: Config, Identity: Default, { - type Error = (); + type Error = u16; type Success = Identity; - fn retrieve(_identifier: &Identifier) -> Result, Self::Error> { + fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { Ok(Some(Identity::default())) } } @@ -89,16 +56,66 @@ pub mod identity_provision { // Always return `None`. Might be useful for tests. pub struct NoneIdentityProvider; - impl IdentityProvider for NoneIdentityProvider { - type Error = (); + impl IdentityProvider for NoneIdentityProvider + where + Runtime: Config, + { + type Error = u16; type Success = (); - fn retrieve(_identifier: &Identifier) -> Result, Self::Error> { + fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { Ok(None) } } } +pub use identity_generation::*; +pub mod identity_generation { + use super::*; + + use crate::IdentityOf; + + use parity_scale_codec::{FullCodec, MaxEncodedLen}; + use scale_info::TypeInfo; + use sp_std::{fmt::Debug, marker::PhantomData}; + + pub trait IdentityCommitmentGenerator + where + Runtime: Config, + Runtime::IdentityProvider: IdentityProvider, + { + type Error: Into; + type Output: Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen; + + fn generate_commitment( + identifier: &Runtime::Identifier, + identity: &IdentityOf, + version: IdentityCommitmentVersion, + ) -> Result; + } + + // Implement the `IdentityCommitmentGenerator` by returning the `Default` value + // for the `Output` type. + pub struct DefaultIdentityCommitmentGenerator(PhantomData); + + impl IdentityCommitmentGenerator for DefaultIdentityCommitmentGenerator + where + Runtime: Config, + Output: Default + Clone + Eq + Debug + TypeInfo + FullCodec + MaxEncodedLen, + { + type Error = u16; + type Output = Output; + + fn generate_commitment( + _identifier: &Runtime::Identifier, + _identity: &IdentityOf, + _version: IdentityCommitmentVersion, + ) -> Result { + Ok(Output::default()) + } + } +} + pub trait SubmitterInfo { type Submitter; @@ -133,14 +150,14 @@ where fn on_identity_committed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - commitment: &Runtime::IdentityCommitment, + commitment: &IdentityCommitmentOf, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error>; fn on_commitment_removed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - commitment: &Runtime::IdentityCommitment, + commitment: &IdentityCommitmentOf, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error>; } @@ -156,7 +173,7 @@ where fn on_commitment_removed( _identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, _version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { Ok(()) @@ -165,7 +182,7 @@ where fn on_identity_committed( _identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, _version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { Ok(()) From 0ca41882075ec88a1104ec70d9c4f068a93eb25f Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 11:21:43 +0100 Subject: [PATCH 32/46] Refactor kilt-dip-support --- crates/kilt-dip-support/src/export/sibling.rs | 3 ++- crates/kilt-dip-support/src/traits.rs | 4 ++-- crates/kilt-dip-support/src/utils.rs | 11 ++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index e0234b6492..e50d79a00c 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -21,6 +21,7 @@ use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyId use frame_system::pallet_prelude::BlockNumberFor; use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_consumer::traits::IdentityProofVerifier; +use pallet_dip_provider::IdentityCommitmentOf; use parity_scale_codec::{Decode, Encode, HasCompact}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, U256}; @@ -171,7 +172,7 @@ impl< + pallet_dip_provider::Config::DidIdentifier>, OutputOf: Ord + From>, KeyIdOf: Into, - KiltDipMerkleHasher: sp_core::Hasher, + KiltDipMerkleHasher: sp_core::Hasher>, ConsumerRuntime: pallet_dip_consumer::Config, ConsumerRuntime::LocalIdentityInfo: Bump + Default + Encode, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, diff --git a/crates/kilt-dip-support/src/traits.rs b/crates/kilt-dip-support/src/traits.rs index d3c013b1b5..aa426aae17 100644 --- a/crates/kilt-dip-support/src/traits.rs +++ b/crates/kilt-dip-support/src/traits.rs @@ -17,7 +17,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org use frame_system::pallet_prelude::BlockNumberFor; -use pallet_dip_provider::IdentityCommitmentVersion; +use pallet_dip_provider::{IdentityCommitmentOf, IdentityCommitmentVersion}; use sp_core::storage::StorageKey; use sp_runtime::traits::{CheckedAdd, One, Zero}; use sp_std::marker::PhantomData; @@ -87,7 +87,7 @@ where T: pallet_dip_provider::Config, { type BlockNumber = BlockNumberFor; - type Commitment = T::IdentityCommitment; + type Commitment = IdentityCommitmentOf; type Hasher = T::Hashing; type Identifier = T::Identifier; type Key = StorageKey; diff --git a/crates/kilt-dip-support/src/utils.rs b/crates/kilt-dip-support/src/utils.rs index 30d2d01d50..335a0a25e2 100644 --- a/crates/kilt-dip-support/src/utils.rs +++ b/crates/kilt-dip-support/src/utils.rs @@ -105,16 +105,17 @@ where } } -impl IdentityProvider for CombineIdentityFrom +impl IdentityProvider for CombineIdentityFrom where - A: IdentityProvider, - B: IdentityProvider, - C: IdentityProvider, + Runtime: pallet_dip_provider::Config, + A: IdentityProvider, + B: IdentityProvider, + C: IdentityProvider, { type Error = CombineError; type Success = CombinedIdentityResult, Option, Option>; - fn retrieve(identifier: &Identifier) -> Result, Self::Error> { + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { match ( A::retrieve(identifier), B::retrieve(identifier), From b9c63517a1bdcf3caae23c9ddb1ccf5795893bf3 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 11:21:55 +0100 Subject: [PATCH 33/46] Refactor runtime-common --- runtimes/common/src/dip/did.rs | 37 +++++++++++++++++-------------- runtimes/common/src/dip/merkle.rs | 23 +++++++++++-------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/runtimes/common/src/dip/did.rs b/runtimes/common/src/dip/did.rs index f4255c438b..904ddc1e61 100644 --- a/runtimes/common/src/dip/did.rs +++ b/runtimes/common/src/dip/did.rs @@ -45,17 +45,18 @@ impl From for u16 { pub struct DidIdentityProvider(PhantomData); -impl IdentityProvider for DidIdentityProvider +impl IdentityProvider for DidIdentityProvider where - T: did::Config, + Runtime: + did::Config::Identifier> + pallet_dip_provider::Config, { type Error = DidIdentityProviderError; - type Success = DidDetails; + type Success = DidDetails; - fn retrieve(identifier: &T::DidIdentifier) -> Result, Self::Error> { + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { match ( - did::Pallet::::get_did(identifier), - did::Pallet::::get_deleted_did(identifier), + did::Pallet::::get_did(identifier), + did::Pallet::::get_deleted_did(identifier), ) { (Some(details), _) => Ok(Some(details)), (_, Some(_)) => Ok(None), @@ -68,25 +69,26 @@ pub type Web3OwnershipOf = RevealedWeb3Name<: pub struct DidWeb3NameProvider(PhantomData); -impl IdentityProvider for DidWeb3NameProvider +impl IdentityProvider for DidWeb3NameProvider where - T: pallet_web3_names::Config, + Runtime: pallet_web3_names::Config::Identifier> + + pallet_dip_provider::Config, { type Error = DidIdentityProviderError; - type Success = Web3OwnershipOf; + type Success = Web3OwnershipOf; - fn retrieve(identifier: &T::Web3NameOwner) -> Result, Self::Error> { - let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { + let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { return Ok(None); }; - let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { + let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { log::error!( "Inconsistent reverse map pallet_web3_names::owner(web3_name). Cannot find owner for web3name {:#?}", web3_name ); return Err(DidIdentityProviderError::Internal); }; - Ok(Some(Web3OwnershipOf:: { + Ok(Some(Web3OwnershipOf:: { web3_name, claimed_at: details.claimed_at, })) @@ -95,16 +97,17 @@ where pub struct DidLinkedAccountsProvider(PhantomData); -impl IdentityProvider for DidLinkedAccountsProvider +impl IdentityProvider for DidLinkedAccountsProvider where - T: pallet_did_lookup::Config, + Runtime: pallet_did_lookup::Config::Identifier> + + pallet_dip_provider::Config, { type Error = DidIdentityProviderError; type Success = Vec; - fn retrieve(identifier: &T::DidIdentifier) -> Result, Self::Error> { + fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { Ok(Some( - pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), + pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), )) } } diff --git a/runtimes/common/src/dip/merkle.rs b/runtimes/common/src/dip/merkle.rs index d7af9c87b5..8ff730f771 100644 --- a/runtimes/common/src/dip/merkle.rs +++ b/runtimes/common/src/dip/merkle.rs @@ -20,7 +20,10 @@ use frame_support::RuntimeDebug; use frame_system::pallet_prelude::BlockNumberFor; use kilt_dip_support::merkle::{DidKeyMerkleKey, DidKeyMerkleValue, DidMerkleProof}; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_provider::{traits::IdentityCommitmentGenerator, IdentityCommitmentVersion}; +use pallet_dip_provider::{ + traits::{IdentityCommitmentGenerator, IdentityProvider}, + IdentityCommitmentVersion, IdentityOf, +}; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_std::{borrow::ToOwned, marker::PhantomData, vec::Vec}; @@ -28,7 +31,7 @@ use sp_trie::{generate_trie_proof, LayoutV1, MemoryDB, TrieDBMutBuilder, TrieHas use kilt_dip_support::merkle::{DidKeyRelationship, RevealedDidMerkleProofLeaf}; -use crate::{dip::did::LinkedDidInfoOf, DidIdentifier}; +use crate::dip::did::LinkedDidInfoOf; pub type BlindedValue = Vec; pub type DidMerkleProofOf = DidMerkleProof< @@ -328,10 +331,11 @@ pub mod v0 { } pub(super) fn generate_commitment( - identity: &LinkedDidInfoOf, + identity: &IdentityOf, ) -> Result where - Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config, + Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config + pallet_dip_provider::Config, + Runtime::IdentityProvider: IdentityProvider>, { let mut db = MemoryDB::default(); calculate_root_with_db(identity, &mut db) @@ -340,18 +344,19 @@ pub mod v0 { pub struct DidMerkleRootGenerator(PhantomData); -impl IdentityCommitmentGenerator> for DidMerkleRootGenerator +impl IdentityCommitmentGenerator for DidMerkleRootGenerator where - Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config, + Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config + pallet_dip_provider::Config, + Runtime::IdentityProvider: IdentityProvider>, { type Error = DidMerkleProofError; type Output = Runtime::Hash; fn generate_commitment( - _identifier: &DidIdentifier, - identity: &LinkedDidInfoOf, + _identifier: &Runtime::Identifier, + identity: &IdentityOf, version: IdentityCommitmentVersion, - ) -> Result { + ) -> Result { match version { 0 => v0::generate_commitment::(identity), _ => Err(DidMerkleProofError::UnsupportedVersion), From 648299ca5be519950d8f47bf03607e7fbb47a423 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 11:24:44 +0100 Subject: [PATCH 34/46] Fix pallet-deposit-storage and dip-provider runtime template --- dip-template/runtimes/dip-provider/src/dip.rs | 7 ++----- pallets/pallet-deposit-storage/src/deposit.rs | 6 +++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 12ac28a33b..998d3e3073 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -31,7 +31,7 @@ use sp_std::vec::Vec; use crate::{ deposit::{DepositHooks, DepositNamespaces}, - AccountId, Balances, DidIdentifier, Hash, Runtime, RuntimeEvent, RuntimeHoldReason, + AccountId, Balances, DidIdentifier, Runtime, RuntimeEvent, RuntimeHoldReason, }; pub mod runtime_api { @@ -49,7 +49,7 @@ pub mod runtime_api { #[derive(Encode, Decode, TypeInfo)] pub enum DipProofError { IdentityNotFound, - IdentityProviderError( as IdentityProvider>::Error), + IdentityProviderError( as IdentityProvider>::Error), MerkleProofError(DidMerkleProofError), } } @@ -140,11 +140,8 @@ impl pallet_dip_provider::Config for Runtime { type CommitOriginCheck = EnsureDidOrigin; type CommitOrigin = DidRawOrigin; type Identifier = DidIdentifier; - type IdentityCommitment = Hash; type IdentityCommitmentGenerator = DidMerkleRootGenerator; - type IdentityCommitmentGeneratorError = DidMerkleProofError; type IdentityProvider = LinkedDidInfoProviderOf; - type IdentityProviderError = as IdentityProvider>::Error; type ProviderHooks = deposit::DepositCollectorHooks; type RuntimeEvent = RuntimeEvent; } diff --git a/pallets/pallet-deposit-storage/src/deposit.rs b/pallets/pallet-deposit-storage/src/deposit.rs index a76acce619..c01296e23e 100644 --- a/pallets/pallet-deposit-storage/src/deposit.rs +++ b/pallets/pallet-deposit-storage/src/deposit.rs @@ -24,7 +24,7 @@ use frame_support::{ }, }; use kilt_support::Deposit; -use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentVersion}; +use pallet_dip_provider::{traits::ProviderHooks as DipProviderHooks, IdentityCommitmentOf, IdentityCommitmentVersion}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::traits::Get; @@ -74,7 +74,7 @@ where fn on_identity_committed( identifier: &Runtime::Identifier, submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, version: IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); @@ -111,7 +111,7 @@ where fn on_commitment_removed( identifier: &Runtime::Identifier, _submitter: &Runtime::AccountId, - _commitment: &Runtime::IdentityCommitment, + _commitment: &IdentityCommitmentOf, version: pallet_dip_provider::IdentityCommitmentVersion, ) -> Result<(), Self::Error> { let namespace = DepositsNamespace::get(); From 6c631c5e5ddd6cd4cdae9d08897ca28c7c475bc5 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 11:58:34 +0100 Subject: [PATCH 35/46] Refactor pallet-dip-consumer --- pallets/pallet-dip-consumer/src/lib.rs | 31 ++++------------ pallets/pallet-dip-consumer/src/traits.rs | 44 ++++++++++++----------- 2 files changed, 30 insertions(+), 45 deletions(-) diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index 7044646673..cf1b812499 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -40,10 +40,9 @@ pub mod pallet { use crate::traits::IdentityProofVerifier; - pub type VerificationResultOf = <::ProofVerifier as IdentityProofVerifier< - ::RuntimeCall, - ::Identifier, - >>::VerificationResult; + pub type IdentityProofOf = <::ProofVerifier as IdentityProofVerifier>::Proof; + pub type RuntimeCallOf = ::RuntimeCall; + pub type VerificationResultOf = <::ProofVerifier as IdentityProofVerifier>::VerificationResult; const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); @@ -56,31 +55,15 @@ pub mod pallet { pub trait Config: frame_system::Config { /// Preliminary filter to filter out calls before doing any heavier /// computations. - type DipCallOriginFilter: Contains<::RuntimeCall>; + type DipCallOriginFilter: Contains>; /// The identifier of a subject, e.g., a DID. type Identifier: Parameter + MaxEncodedLen; - /// The proof users must provide to operate with their higher-level - /// identity. Depending on the use cases, this proof can contain - /// heterogeneous bits of information that the proof verifier will - /// utilize. For instance, a proof could contain both a Merkle proof and - /// a DID signature. - type IdentityProof: Parameter; /// The details stored in this pallet associated with any given subject. type LocalIdentityInfo: FullCodec + TypeInfo + MaxEncodedLen; - type ProofVerificationError: Into; /// The logic of the proof verifier, called upon each execution of the /// `dispatch_as` extrinsic. - type ProofVerifier: IdentityProofVerifier< - ::RuntimeCall, - Self::Identifier, - Error = Self::ProofVerificationError, - Proof = Self::IdentityProof, - IdentityDetails = Self::LocalIdentityInfo, - Submitter = ::AccountId, - >; - /// The overarching runtime call type. + type ProofVerifier: IdentityProofVerifier; type RuntimeCall: Parameter + Dispatchable::RuntimeOrigin>; - /// The overarching runtime origin type. type RuntimeOrigin: From> + From<::RuntimeOrigin>; } @@ -113,8 +96,8 @@ pub mod pallet { pub fn dispatch_as( origin: OriginFor, identifier: T::Identifier, - proof: T::IdentityProof, - call: Box<::RuntimeCall>, + proof: IdentityProofOf, + call: Box>, ) -> DispatchResult { // TODO: Make origin check configurable, and require that it at least returns // the submitter's account. diff --git a/pallets/pallet-dip-consumer/src/traits.rs b/pallets/pallet-dip-consumer/src/traits.rs index 0b7fa2a85c..9213166288 100644 --- a/pallets/pallet-dip-consumer/src/traits.rs +++ b/pallets/pallet-dip-consumer/src/traits.rs @@ -16,40 +16,42 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use sp_std::marker::PhantomData; +use frame_support::Parameter; -pub trait IdentityProofVerifier { - type Error; - type IdentityDetails; - type Proof; - type Submitter; +use crate::{Config, RuntimeCallOf}; + +pub trait IdentityProofVerifier +where + Runtime: Config, +{ + type Error: Into; + type Proof: Parameter; type VerificationResult; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &RuntimeCallOf, + subject: &Runtime::Identifier, + submitter: &Runtime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result; } // Always returns success. -pub struct SuccessfulProofVerifier(PhantomData<(IdentityDetails, Proof, Submitter)>); -impl IdentityProofVerifier - for SuccessfulProofVerifier +pub struct SuccessfulProofVerifier; +impl IdentityProofVerifier for SuccessfulProofVerifier +where + Runtime: Config, { - type Error = (); - type IdentityDetails = IdentityDetails; - type Proof = Proof; - type Submitter = Submitter; + type Error = u16; + type Proof = (); type VerificationResult = (); fn verify_proof_for_call_against_details( - _call: &Call, - _subject: &Subject, - _submitter: &Self::Submitter, - _identity_details: &mut Option, + _call: &RuntimeCallOf, + _subject: &Runtime::Identifier, + _submitter: &Runtime::AccountId, + _identity_details: &mut Option, _proof: Self::Proof, ) -> Result { Ok(()) From 99ef1d6954565dbd188d01064c85ac561de41b58 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 12:48:36 +0100 Subject: [PATCH 36/46] Everything compiling --- crates/kilt-dip-support/src/export/mod.rs | 13 +- crates/kilt-dip-support/src/export/sibling.rs | 218 ++++++++---------- crates/kilt-dip-support/src/merkle.rs | 2 +- dip-template/runtimes/dip-consumer/src/dip.rs | 5 +- .../dip-consumer/src/origin_adapter.rs | 6 +- pallets/pallet-dip-consumer/src/traits.rs | 6 +- 6 files changed, 114 insertions(+), 136 deletions(-) diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index 5c8473cd8c..4278eaabb6 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -16,19 +16,20 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -mod child; +// mod child; mod common; mod sibling; -pub use child::{ - DipChildProviderStateProofVerifierError, VersionedChildParachainDipStateProof, - VersionedDipChildProviderStateProofVerifier, -}; +// pub use child::{ +// DipChildProviderStateProofVerifierError, +// VersionedChildParachainDipStateProof, +// VersionedDipChildProviderStateProofVerifier, +// }; pub use sibling::{ DipSiblingProviderStateProofVerifierError, VersionedSiblingKiltProviderVerifier, VersionedSiblingParachainDipStateProof, }; pub mod latest { - pub use super::{child::latest::*, common::latest::*, sibling::latest::*}; + pub use super::{common::latest::*, sibling::latest::*}; } diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index e50d79a00c..3be0b76661 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -18,14 +18,15 @@ use cumulus_primitives_core::ParaId; use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use frame_support::Parameter; use frame_system::pallet_prelude::BlockNumberFor; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_consumer::traits::IdentityProofVerifier; +use pallet_dip_consumer::{traits::IdentityProofVerifier, RuntimeCallOf}; use pallet_dip_provider::IdentityCommitmentOf; use parity_scale_codec::{Decode, Encode, HasCompact}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, U256}; -use sp_runtime::traits::{CheckedSub, Get}; +use sp_runtime::traits::Get; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{ @@ -150,11 +151,7 @@ impl< const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, const MAX_DID_SIGNATURE_DURATION: u16, - > - IdentityProofVerifier< - ::RuntimeCall, - ::DidIdentifier, - > + > IdentityProofVerifier for VersionedSiblingKiltProviderVerifier< KiltRuntime, ConsumerRuntime, @@ -169,7 +166,7 @@ impl< + pallet_web3_names::Config + pallet_did_lookup::Config + parachain_info::Config - + pallet_dip_provider::Config::DidIdentifier>, + + pallet_dip_provider::Config, OutputOf: Ord + From>, KeyIdOf: Into, KiltDipMerkleHasher: sp_core::Hasher>, @@ -177,10 +174,10 @@ impl< ConsumerRuntime::LocalIdentityInfo: Bump + Default + Encode, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, RelayChainStateInfo::ParaId: From, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, + RelayChainStateInfo::BlockNumber: Parameter + 'static + Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, LocalDidCallVerifier: DipCallOriginFilter< - ::RuntimeCall, + RuntimeCallOf, OriginInfo = ( DidVerificationKey, DidVerificationKeyRelationship, @@ -193,7 +190,6 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = ConsumerRuntime::LocalIdentityInfo; type Proof = VersionedSiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -206,7 +202,6 @@ impl< >, BlockNumberFor, >; - type Submitter = ConsumerRuntime::AccountId; type VerificationResult = RevealedDidMerkleProofLeaves< KeyIdOf, KiltRuntime::AccountId, @@ -218,31 +213,33 @@ impl< >; fn verify_proof_for_call_against_details( - call: &::RuntimeCall, - subject: &::DidIdentifier, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &RuntimeCallOf, + subject: &ConsumerRuntime::Identifier, + submitter: &ConsumerRuntime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { - VersionedSiblingParachainDipStateProof::V0(v0_proof) => { - v0::DipSiblingProviderStateProofVerifier::< - RelayChainStateInfo, - KiltParachainId, - ProviderParachainStateInfoViaProviderPallet, - ConsumerRuntime::AccountId, - KiltDipMerkleHasher, - KeyIdOf, - KiltRuntime::AccountId, - KiltRuntime::Web3Name, - LinkableAccountId, - MAX_REVEALED_KEYS_COUNT, - MAX_REVEALED_ACCOUNTS_COUNT, - ConsumerRuntime::LocalIdentityInfo, - FrameSystemDidSignatureContext, - LocalDidCallVerifier, - >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof) - } + VersionedSiblingParachainDipStateProof::V0(v0_proof) => , + ProviderParachainStateInfoViaProviderPallet, + KiltDipMerkleHasher, + KeyIdOf, + KiltRuntime::AccountId, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + FrameSystemDidSignatureContext, + LocalDidCallVerifier, + > as IdentityProofVerifier>::verify_proof_for_call_against_details( + call, + subject, + submitter, + identity_details, + v0_proof, + ), } } } @@ -251,7 +248,6 @@ pub struct GenericVersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -259,7 +255,6 @@ pub struct GenericVersionedDipSiblingProviderStateProofVerifier< ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, >( @@ -268,25 +263,21 @@ pub struct GenericVersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, ProviderWeb3Name, ProviderLinkedAccountId, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, )>, ); impl< - Call, - Subject, + ConsumerRuntime, RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -294,15 +285,13 @@ impl< ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for GenericVersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -310,40 +299,41 @@ impl< ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, - TxSubmitter: Encode, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Bump + Default, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, OutputOf: Ord, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, + RelayChainStateInfo::BlockNumber: Parameter + 'static + Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, SiblingProviderParachainId: Get, - SiblingProviderStateInfo: - traits::ProviderParachainStateInfo, + SiblingProviderStateInfo: traits::ProviderParachainStateInfo< + Identifier = ConsumerRuntime::Identifier, + Commitment = ProviderDipMerkleHasher::Out, + >, OutputOf: Ord + From>, - SiblingProviderStateInfo::BlockNumber: Encode + Clone, + SiblingProviderStateInfo::BlockNumber: Parameter + 'static, SiblingProviderStateInfo::Commitment: Decode, SiblingProviderStateInfo::Key: AsRef<[u8]>, - LocalContextProvider: DidSignatureVerifierContext, - LocalContextProvider::BlockNumber: Encode + CheckedSub + From + PartialOrd, - LocalContextProvider::Hash: Encode, + LocalContextProvider: + DidSignatureVerifierContext, Hash = ConsumerRuntime::Hash>, LocalContextProvider::SignedExtra: Encode, - LocalDidDetails: Bump + Default + Encode, - LocalDidCallVerifier: - DipCallOriginFilter, DidVerificationKeyRelationship)>, + LocalDidCallVerifier: DipCallOriginFilter< + RuntimeCallOf, + OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), + >, ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Encode + Clone + Into, - ProviderAccountId: Encode + Clone, - ProviderLinkedAccountId: Encode + Clone, - ProviderWeb3Name: Encode + Clone, + ProviderDidKeyId: Parameter + 'static + Into, + ProviderAccountId: Parameter + 'static, + ProviderLinkedAccountId: Parameter + 'static, + ProviderWeb3Name: Parameter + 'static, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -351,7 +341,6 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = VersionedSiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -362,9 +351,8 @@ impl< ProviderWeb3Name, ProviderLinkedAccountId, >, - LocalContextProvider::BlockNumber, + BlockNumberFor, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -376,31 +364,33 @@ impl< >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &RuntimeCallOf, + subject: &ConsumerRuntime::Identifier, + submitter: &ConsumerRuntime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { - VersionedSiblingParachainDipStateProof::V0(v0_proof) => { - v0::DipSiblingProviderStateProofVerifier::< - RelayChainStateInfo, - SiblingProviderParachainId, - SiblingProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, - MAX_REVEALED_KEYS_COUNT, - MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, - >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof) - } + VersionedSiblingParachainDipStateProof::V0(v0_proof) => as IdentityProofVerifier>::verify_proof_for_call_against_details( + call, + subject, + submitter, + identity_details, + v0_proof, + ), } } } @@ -412,6 +402,7 @@ pub mod latest { mod v0 { use super::*; + use frame_support::Parameter; use sp_std::borrow::Borrow; use crate::{ @@ -439,7 +430,6 @@ mod v0 { RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -447,7 +437,6 @@ mod v0 { ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, >( @@ -456,25 +445,21 @@ mod v0 { RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, ProviderWeb3Name, ProviderLinkedAccountId, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, )>, ); impl< - Call, - Subject, + ConsumerRuntime, RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -482,15 +467,13 @@ mod v0 { ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for DipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, SiblingProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -498,42 +481,41 @@ mod v0 { ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, - TxSubmitter: Encode, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Bump + Default, RelayChainStateInfo: traits::RelayChainStorageInfo + traits::RelayChainStateInfo, OutputOf: Ord, - RelayChainStateInfo::BlockNumber: Copy + Into + TryFrom + HasCompact, + RelayChainStateInfo::BlockNumber: Parameter + 'static + Copy + Into + TryFrom + HasCompact, RelayChainStateInfo::Key: AsRef<[u8]>, SiblingProviderParachainId: Get, - SiblingProviderStateInfo: - traits::ProviderParachainStateInfo, + SiblingProviderStateInfo: traits::ProviderParachainStateInfo< + Identifier = ConsumerRuntime::Identifier, + Commitment = ProviderDipMerkleHasher::Out, + >, OutputOf: Ord + From>, - SiblingProviderStateInfo::BlockNumber: Encode + Clone, + SiblingProviderStateInfo::BlockNumber: Parameter + 'static, SiblingProviderStateInfo::Commitment: Decode, SiblingProviderStateInfo::Key: AsRef<[u8]>, - LocalContextProvider: DidSignatureVerifierContext, - LocalContextProvider::BlockNumber: Encode + CheckedSub + From + PartialOrd, - LocalContextProvider::Hash: Encode, + LocalContextProvider: + DidSignatureVerifierContext, Hash = ConsumerRuntime::Hash>, LocalContextProvider::SignedExtra: Encode, - LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - Call, + RuntimeCallOf, OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Encode + Clone + Into, - ProviderAccountId: Encode + Clone, - ProviderLinkedAccountId: Encode + Clone, - ProviderWeb3Name: Encode + Clone, + ProviderDidKeyId: Parameter + 'static + Into, + ProviderAccountId: Parameter + 'static, + ProviderLinkedAccountId: Parameter + 'static, + ProviderWeb3Name: Parameter + 'static, { type Error = DipSiblingProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -541,7 +523,6 @@ mod v0 { DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = SiblingParachainDipStateProof< RelayChainStateInfo::BlockNumber, Vec>, @@ -552,9 +533,8 @@ mod v0 { ProviderWeb3Name, ProviderLinkedAccountId, >, - LocalContextProvider::BlockNumber, + BlockNumberFor, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -566,10 +546,10 @@ mod v0 { >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &RuntimeCallOf, + subject: &ConsumerRuntime::Identifier, + submitter: &ConsumerRuntime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Verify relay chain proof. diff --git a/crates/kilt-dip-support/src/merkle.rs b/crates/kilt-dip-support/src/merkle.rs index 2f23c952e5..ee5209d613 100644 --- a/crates/kilt-dip-support/src/merkle.rs +++ b/crates/kilt-dip-support/src/merkle.rs @@ -24,7 +24,7 @@ use sp_runtime::{BoundedVec, SaturatedConversion}; use sp_std::{fmt::Debug, marker::PhantomData, vec::Vec}; use sp_trie::{verify_trie_proof, LayoutV1}; -#[derive(Encode, Decode, RuntimeDebug, Clone, Eq, PartialEq, Default, TypeInfo)] +#[derive(Encode, Decode, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug, TypeInfo, Clone)] pub struct DidMerkleProof { pub blinded: BlindedValues, // TODO: Probably replace with a different data structure for better lookup capabilities diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 754235a78f..0998b8fafd 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -28,8 +28,7 @@ use sp_runtime::traits::BlakeTwo256; use crate::{DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; -pub type MerkleProofVerifierOutputOf = - >::VerificationResult; +pub type MerkleProofVerifierOutputOf = >::VerificationResult; pub type ProofVerifier = VersionedSiblingKiltProviderVerifier< ProviderRuntime, Runtime, @@ -44,9 +43,7 @@ pub type ProofVerifier = VersionedSiblingKiltProviderVerifier< impl pallet_dip_consumer::Config for Runtime { type DipCallOriginFilter = PreliminaryDipOriginFilter; type Identifier = DidIdentifier; - type IdentityProof = >::Proof; type LocalIdentityInfo = u128; - type ProofVerificationError = >::Error; type ProofVerifier = ProofVerifier; type RuntimeCall = RuntimeCall; type RuntimeOrigin = RuntimeOrigin; diff --git a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs index b9d008e5c8..f99b9d6156 100644 --- a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs +++ b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs @@ -16,7 +16,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutputOf, RuntimeCall, RuntimeOrigin, Web3Name}; +use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutputOf, Runtime, RuntimeOrigin, Web3Name}; use frame_support::traits::EnsureOrigin; use pallet_dip_consumer::{DipOrigin, EnsureDipOrigin}; use pallet_postit::traits::Usernamable; @@ -41,9 +41,7 @@ impl EnsureOrigin for EnsureDipOriginAdapter { } #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct DipOriginAdapter( - DipOrigin>, -); +pub struct DipOriginAdapter(DipOrigin>); impl Usernamable for DipOriginAdapter { type Username = Web3Name; diff --git a/pallets/pallet-dip-consumer/src/traits.rs b/pallets/pallet-dip-consumer/src/traits.rs index 9213166288..d7075a4a57 100644 --- a/pallets/pallet-dip-consumer/src/traits.rs +++ b/pallets/pallet-dip-consumer/src/traits.rs @@ -16,7 +16,9 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use frame_support::Parameter; +use parity_scale_codec::{Decode, Encode}; +use scale_info::TypeInfo; +use sp_std::fmt::Debug; use crate::{Config, RuntimeCallOf}; @@ -25,7 +27,7 @@ where Runtime: Config, { type Error: Into; - type Proof: Parameter; + type Proof: TypeInfo + Encode + Decode + Clone + Debug + PartialEq; type VerificationResult; fn verify_proof_for_call_against_details( From 4e74ecb26a0caa8bb78cc71696c4b79722a77080 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 13:21:14 +0100 Subject: [PATCH 37/46] COMPILING --- crates/kilt-dip-support/src/export/child.rs | 315 ++++++++++++++------ crates/kilt-dip-support/src/export/mod.rs | 13 +- 2 files changed, 234 insertions(+), 94 deletions(-) diff --git a/crates/kilt-dip-support/src/export/child.rs b/crates/kilt-dip-support/src/export/child.rs index c238080099..fe9d97aee2 100644 --- a/crates/kilt-dip-support/src/export/child.rs +++ b/crates/kilt-dip-support/src/export/child.rs @@ -16,12 +16,17 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; -use pallet_dip_consumer::traits::IdentityProofVerifier; +use cumulus_primitives_core::ParaId; +use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship, KeyIdOf}; +use frame_support::Parameter; +use frame_system::pallet_prelude::BlockNumberFor; +use pallet_did_lookup::linkable_account::LinkableAccountId; +use pallet_dip_consumer::{traits::IdentityProofVerifier, RuntimeCallOf}; +use pallet_dip_provider::IdentityCommitmentOf; use parity_scale_codec::{Codec, Decode, Encode, HasCompact}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, U256}; -use sp_runtime::traits::{AtLeast32BitUnsigned, CheckedSub, Get, Hash, MaybeDisplay, Member, SimpleBitOps}; +use sp_runtime::traits::{AtLeast32BitUnsigned, Get, Hash, MaybeDisplay, Member, SimpleBitOps}; use sp_std::{marker::PhantomData, vec::Vec}; use crate::{ @@ -33,6 +38,7 @@ use crate::{ RelayChainStorageInfo, }, utils::OutputOf, + FrameSystemDidSignatureContext, ProviderParachainStateInfoViaProviderPallet, }; #[derive(Encode, Decode, PartialEq, Eq, RuntimeDebug, TypeInfo, Clone)] @@ -112,11 +118,160 @@ where } } +struct KiltParachainId(PhantomData<(Runtime, Id)>); + +impl Get for KiltParachainId +where + Runtime: parachain_info::Config, + Id: From, +{ + fn get() -> Id { + parachain_info::Pallet::::parachain_id().into() + } +} + +pub struct VersionedSiblingKiltProviderVerifier< + KiltRuntime, + ConsumerRuntime, + RelayChainInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + const MAX_REVEALED_KEYS_COUNT: u32, + const MAX_REVEALED_ACCOUNTS_COUNT: u32, + const MAX_DID_SIGNATURE_DURATION: u16, +>( + PhantomData<( + KiltRuntime, + ConsumerRuntime, + RelayChainInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + )>, +); + +impl< + KiltRuntime, + ConsumerRuntime, + RelayChainInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + const MAX_REVEALED_KEYS_COUNT: u32, + const MAX_REVEALED_ACCOUNTS_COUNT: u32, + const MAX_DID_SIGNATURE_DURATION: u16, + > IdentityProofVerifier + for VersionedSiblingKiltProviderVerifier< + KiltRuntime, + ConsumerRuntime, + RelayChainInfo, + KiltDipMerkleHasher, + LocalDidCallVerifier, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + MAX_DID_SIGNATURE_DURATION, + > where + KiltRuntime: did::Config + + pallet_web3_names::Config + + pallet_did_lookup::Config + + parachain_info::Config + + pallet_dip_provider::Config, + OutputOf: Ord + From::Hasher>>, + KeyIdOf: Into, + KiltDipMerkleHasher: sp_core::Hasher>, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Bump + Default + Encode, + RelayChainInfo: RelayChainStorageInfo> + + HistoricalBlockRegistry< + BlockNumber = ::BlockNumber, + Hasher = ::Hasher, + >, + RelayChainInfo::ParaId: From, + OutputOf<::Hasher>: + Ord + Default + sp_std::hash::Hash + Copy + Member + MaybeDisplay + SimpleBitOps + Codec, + ::Hasher: Parameter + 'static, + ::BlockNumber: Copy + + Into + + TryFrom + + HasCompact + + Member + + sp_std::hash::Hash + + MaybeDisplay + + AtLeast32BitUnsigned + + Codec + + Parameter + + 'static, + RelayChainInfo::Key: AsRef<[u8]>, + LocalDidCallVerifier: DipCallOriginFilter< + RuntimeCallOf, + OriginInfo = ( + DidVerificationKey, + DidVerificationKeyRelationship, + ), + >, +{ + type Error = DipChildProviderStateProofVerifierError< + ParachainHeadProofVerifierError, + DipIdentityCommitmentProofVerifierError, + DidMerkleProofVerifierError, + RevealedDidKeysSignatureAndCallVerifierError, + >; + type Proof = VersionedChildParachainDipStateProof< + ::BlockNumber, + ::Hasher, + Vec>, + RevealedDidMerkleProofLeaf< + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, + >, + >; + type VerificationResult = RevealedDidMerkleProofLeaves< + KeyIdOf, + KiltRuntime::AccountId, + BlockNumberFor, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + >; + + fn verify_proof_for_call_against_details( + call: &RuntimeCallOf, + subject: &ConsumerRuntime::Identifier, + submitter: &ConsumerRuntime::AccountId, + identity_details: &mut Option, + proof: Self::Proof, + ) -> Result { + match proof { + VersionedChildParachainDipStateProof::V0(v0_proof) => , + ProviderParachainStateInfoViaProviderPallet, + KiltDipMerkleHasher, + KeyIdOf, + KiltRuntime::AccountId, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + FrameSystemDidSignatureContext, + LocalDidCallVerifier, + > as IdentityProofVerifier>::verify_proof_for_call_against_details( + call, + subject, + submitter, + identity_details, + v0_proof, + ), + } + } +} + pub struct VersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -124,7 +279,6 @@ pub struct VersionedDipChildProviderStateProofVerifier< ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, >( @@ -133,25 +287,21 @@ pub struct VersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, ProviderWeb3Name, ProviderLinkedAccountId, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, )>, ); impl< - Call, - Subject, + ConsumerRuntime, RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -159,15 +309,13 @@ impl< ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for VersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -175,20 +323,20 @@ impl< ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, - TxSubmitter: Encode, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Bump + Default, - RelayChainInfo: RelayChainStorageInfo + RelayChainInfo: RelayChainStorageInfo> + HistoricalBlockRegistry< BlockNumber = ::BlockNumber, Hasher = ::Hasher, >, OutputOf<::Hasher>: Ord + Default + sp_std::hash::Hash + Copy + Member + MaybeDisplay + SimpleBitOps + Codec, + ::Hasher: Parameter + 'static, ::BlockNumber: Copy + Into + TryFrom @@ -197,31 +345,33 @@ impl< + sp_std::hash::Hash + MaybeDisplay + AtLeast32BitUnsigned - + Codec, + + Codec + + Parameter + + 'static, RelayChainInfo::Key: AsRef<[u8]>, ChildProviderParachainId: Get, - ChildProviderStateInfo: ProviderParachainStateInfo, + ChildProviderStateInfo: + ProviderParachainStateInfo, OutputOf: Ord + From::Hasher>>, - ChildProviderStateInfo::BlockNumber: Encode + Clone, + ChildProviderStateInfo::BlockNumber: Parameter + 'static, ChildProviderStateInfo::Commitment: Decode, ChildProviderStateInfo::Key: AsRef<[u8]>, LocalContextProvider: - DidSignatureVerifierContext::BlockNumber>, - LocalContextProvider::BlockNumber: CheckedSub + From, - LocalContextProvider::Hash: Encode, + DidSignatureVerifierContext, Hash = ConsumerRuntime::Hash>, LocalContextProvider::SignedExtra: Encode, - LocalDidDetails: Bump + Default + Encode, - LocalDidCallVerifier: - DipCallOriginFilter, DidVerificationKeyRelationship)>, + LocalDidCallVerifier: DipCallOriginFilter< + RuntimeCallOf, + OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), + >, ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Encode + Clone + Into, - ProviderAccountId: Encode + Clone, - ProviderLinkedAccountId: Encode + Clone, - ProviderWeb3Name: Encode + Clone, + ProviderDidKeyId: Parameter + 'static + Into, + ProviderAccountId: Parameter + 'static, + ProviderLinkedAccountId: Parameter + 'static, + ProviderWeb3Name: Parameter + 'static, { type Error = DipChildProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -229,7 +379,6 @@ impl< DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = VersionedChildParachainDipStateProof< ::BlockNumber, ::Hasher, @@ -242,7 +391,6 @@ impl< ProviderLinkedAccountId, >, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -254,31 +402,33 @@ impl< >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &RuntimeCallOf, + subject: &ConsumerRuntime::Identifier, + submitter: &ConsumerRuntime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { match proof { - VersionedChildParachainDipStateProof::V0(v0_proof) => { - v0::DipChildProviderStateProofVerifier::< - RelayChainInfo, - ChildProviderParachainId, - ChildProviderStateInfo, - TxSubmitter, - ProviderDipMerkleHasher, - ProviderDidKeyId, - ProviderAccountId, - ProviderWeb3Name, - ProviderLinkedAccountId, - MAX_REVEALED_KEYS_COUNT, - MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, - LocalContextProvider, - LocalDidCallVerifier, - >::verify_proof_for_call_against_details(call, subject, submitter, identity_details, v0_proof) - } + VersionedChildParachainDipStateProof::V0(v0_proof) => as IdentityProofVerifier>::verify_proof_for_call_against_details( + call, + subject, + submitter, + identity_details, + v0_proof, + ), } } } @@ -335,7 +485,6 @@ mod v0 { RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -343,7 +492,6 @@ mod v0 { ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, >( @@ -352,25 +500,21 @@ mod v0 { RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, ProviderWeb3Name, ProviderLinkedAccountId, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, )>, ); impl< - Call, - Subject, + ConsumerRuntime, RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -378,15 +522,13 @@ mod v0 { ProviderLinkedAccountId, const MAX_REVEALED_KEYS_COUNT: u32, const MAX_REVEALED_ACCOUNTS_COUNT: u32, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, - > IdentityProofVerifier + > IdentityProofVerifier for DipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, - TxSubmitter, ProviderDipMerkleHasher, ProviderDidKeyId, ProviderAccountId, @@ -394,18 +536,18 @@ mod v0 { ProviderLinkedAccountId, MAX_REVEALED_KEYS_COUNT, MAX_REVEALED_ACCOUNTS_COUNT, - LocalDidDetails, LocalContextProvider, LocalDidCallVerifier, > where - Call: Encode, - TxSubmitter: Encode, + ConsumerRuntime: pallet_dip_consumer::Config, + ConsumerRuntime::LocalIdentityInfo: Bump + Default, - RelayChainInfo: RelayChainStorageInfo + RelayChainInfo: RelayChainStorageInfo> + HistoricalBlockRegistry< BlockNumber = ::BlockNumber, Hasher = ::Hasher, >, + ::Hasher: Parameter + 'static, OutputOf<::Hasher>: Ord + Default + sp_std::hash::Hash + Copy + Member + MaybeDisplay + SimpleBitOps + Codec, ::BlockNumber: Copy @@ -416,35 +558,36 @@ mod v0 { + sp_std::hash::Hash + MaybeDisplay + AtLeast32BitUnsigned - + Codec, + + Codec + + Parameter + + 'static, RelayChainInfo::Key: AsRef<[u8]>, ChildProviderParachainId: Get, - ChildProviderStateInfo: - ProviderParachainStateInfo, + ChildProviderStateInfo: ProviderParachainStateInfo< + Identifier = ConsumerRuntime::Identifier, + Commitment = ProviderDipMerkleHasher::Out, + >, OutputOf: Ord + From::Hasher>>, - ChildProviderStateInfo::BlockNumber: Encode + Clone, + ChildProviderStateInfo::BlockNumber: Parameter + 'static, ChildProviderStateInfo::Commitment: Decode, ChildProviderStateInfo::Key: AsRef<[u8]>, LocalContextProvider: - DidSignatureVerifierContext::BlockNumber>, - LocalContextProvider::BlockNumber: CheckedSub + From, - LocalContextProvider::Hash: Encode, + DidSignatureVerifierContext, Hash = ConsumerRuntime::Hash>, LocalContextProvider::SignedExtra: Encode, - LocalDidDetails: Bump + Default + Encode, LocalDidCallVerifier: DipCallOriginFilter< - Call, + RuntimeCallOf, OriginInfo = (DidVerificationKey, DidVerificationKeyRelationship), >, ProviderDipMerkleHasher: sp_core::Hasher, - ProviderDidKeyId: Encode + Clone + Into, - ProviderAccountId: Encode + Clone, - ProviderLinkedAccountId: Encode + Clone, - ProviderWeb3Name: Encode + Clone, + ProviderDidKeyId: Parameter + 'static + Into, + ProviderAccountId: Parameter + 'static, + ProviderLinkedAccountId: Parameter + 'static, + ProviderWeb3Name: Parameter + 'static, { type Error = DipChildProviderStateProofVerifierError< ParachainHeadProofVerifierError, @@ -452,7 +595,6 @@ mod v0 { DidMerkleProofVerifierError, RevealedDidKeysSignatureAndCallVerifierError, >; - type IdentityDetails = LocalDidDetails; type Proof = ChildParachainDipStateProof< ::BlockNumber, ::Hasher, @@ -465,7 +607,6 @@ mod v0 { ProviderLinkedAccountId, >, >; - type Submitter = TxSubmitter; type VerificationResult = RevealedDidMerkleProofLeaves< ProviderDidKeyId, ProviderAccountId, @@ -477,10 +618,10 @@ mod v0 { >; fn verify_proof_for_call_against_details( - call: &Call, - subject: &Subject, - submitter: &Self::Submitter, - identity_details: &mut Option, + call: &RuntimeCallOf, + subject: &ConsumerRuntime::Identifier, + submitter: &ConsumerRuntime::AccountId, + identity_details: &mut Option, proof: Self::Proof, ) -> Result { // 1. Retrieve block hash from provider at the proof height diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index 4278eaabb6..5c8473cd8c 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -16,20 +16,19 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -// mod child; +mod child; mod common; mod sibling; -// pub use child::{ -// DipChildProviderStateProofVerifierError, -// VersionedChildParachainDipStateProof, -// VersionedDipChildProviderStateProofVerifier, -// }; +pub use child::{ + DipChildProviderStateProofVerifierError, VersionedChildParachainDipStateProof, + VersionedDipChildProviderStateProofVerifier, +}; pub use sibling::{ DipSiblingProviderStateProofVerifierError, VersionedSiblingKiltProviderVerifier, VersionedSiblingParachainDipStateProof, }; pub mod latest { - pub use super::{common::latest::*, sibling::latest::*}; + pub use super::{child::latest::*, common::latest::*, sibling::latest::*}; } From 713a9428693c253e589173f1d50a2c009a55c250 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 13:24:57 +0100 Subject: [PATCH 38/46] Add some comments --- crates/kilt-dip-support/src/export/child.rs | 10 ++++++++-- crates/kilt-dip-support/src/export/mod.rs | 3 +-- crates/kilt-dip-support/src/export/sibling.rs | 6 ++++++ dip-template/runtimes/dip-consumer/src/dip.rs | 4 ++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/crates/kilt-dip-support/src/export/child.rs b/crates/kilt-dip-support/src/export/child.rs index fe9d97aee2..9229266429 100644 --- a/crates/kilt-dip-support/src/export/child.rs +++ b/crates/kilt-dip-support/src/export/child.rs @@ -130,7 +130,9 @@ where } } -pub struct VersionedSiblingKiltProviderVerifier< +// Implements the same `IdentityProvider` trait, but it is internally configured +// by receiving the runtime definitions of both the provider and the receiver. +pub struct VersionedChildKiltProviderVerifier< KiltRuntime, ConsumerRuntime, RelayChainInfo, @@ -159,7 +161,7 @@ impl< const MAX_REVEALED_ACCOUNTS_COUNT: u32, const MAX_DID_SIGNATURE_DURATION: u16, > IdentityProofVerifier - for VersionedSiblingKiltProviderVerifier< + for VersionedChildKiltProviderVerifier< KiltRuntime, ConsumerRuntime, RelayChainInfo, @@ -268,6 +270,10 @@ impl< } } +// More generic version compared to `VersionedChildKiltProviderVerifier`, to be +// used in cases in which it is not possible or not desirable to depend on the +// whole provider runtime definition. Hence, required types must be filled in +// manually. pub struct VersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index 5c8473cd8c..0e90a3d6e7 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -21,8 +21,7 @@ mod common; mod sibling; pub use child::{ - DipChildProviderStateProofVerifierError, VersionedChildParachainDipStateProof, - VersionedDipChildProviderStateProofVerifier, + DipChildProviderStateProofVerifierError, VersionedChildKiltProviderVerifier, VersionedChildParachainDipStateProof, }; pub use sibling::{ DipSiblingProviderStateProofVerifierError, VersionedSiblingKiltProviderVerifier, diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index 3be0b76661..39d1c6acfb 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -123,6 +123,8 @@ where } } +// Implements the same `IdentityProvider` trait, but it is internally configured +// by receiving the runtime definitions of both the provider and the receiver. pub struct VersionedSiblingKiltProviderVerifier< KiltRuntime, ConsumerRuntime, @@ -244,6 +246,10 @@ impl< } } +// More generic version compared to `VersionedSiblingKiltProviderVerifier`, to +// be used in cases in which it is not possible or not desirable to depend on +// the whole provider runtime definition. Hence, required types must be filled +// in manually. pub struct GenericVersionedDipSiblingProviderStateProofVerifier< RelayChainStateInfo, SiblingProviderParachainId, diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 0998b8fafd..7a2af7f12a 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -20,7 +20,7 @@ use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedSiblingKiltProviderVerifier, + traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedChildKiltProviderVerifier, }; use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; @@ -29,7 +29,7 @@ use sp_runtime::traits::BlakeTwo256; use crate::{DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutputOf = >::VerificationResult; -pub type ProofVerifier = VersionedSiblingKiltProviderVerifier< +pub type ProofVerifier = VersionedChildKiltProviderVerifier< ProviderRuntime, Runtime, RelayStateRootsViaRelayStorePallet, From 55fdaf976fb51cc79e9c8be3bee8a7fc68c7f3c1 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 13:31:10 +0100 Subject: [PATCH 39/46] Minor changes --- crates/kilt-dip-support/src/merkle.rs | 2 +- pallets/pallet-dip-consumer/src/traits.rs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/crates/kilt-dip-support/src/merkle.rs b/crates/kilt-dip-support/src/merkle.rs index ee5209d613..2f23c952e5 100644 --- a/crates/kilt-dip-support/src/merkle.rs +++ b/crates/kilt-dip-support/src/merkle.rs @@ -24,7 +24,7 @@ use sp_runtime::{BoundedVec, SaturatedConversion}; use sp_std::{fmt::Debug, marker::PhantomData, vec::Vec}; use sp_trie::{verify_trie_proof, LayoutV1}; -#[derive(Encode, Decode, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug, TypeInfo, Clone)] +#[derive(Encode, Decode, RuntimeDebug, Clone, Eq, PartialEq, Default, TypeInfo)] pub struct DidMerkleProof { pub blinded: BlindedValues, // TODO: Probably replace with a different data structure for better lookup capabilities diff --git a/pallets/pallet-dip-consumer/src/traits.rs b/pallets/pallet-dip-consumer/src/traits.rs index d7075a4a57..9213166288 100644 --- a/pallets/pallet-dip-consumer/src/traits.rs +++ b/pallets/pallet-dip-consumer/src/traits.rs @@ -16,9 +16,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use parity_scale_codec::{Decode, Encode}; -use scale_info::TypeInfo; -use sp_std::fmt::Debug; +use frame_support::Parameter; use crate::{Config, RuntimeCallOf}; @@ -27,7 +25,7 @@ where Runtime: Config, { type Error: Into; - type Proof: TypeInfo + Encode + Decode + Clone + Debug + PartialEq; + type Proof: Parameter; type VerificationResult; fn verify_proof_for_call_against_details( From f6817d272c3a687cfb47a3116fe17f564c4187d3 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 16:24:50 +0100 Subject: [PATCH 40/46] Fix regression error --- dip-template/runtimes/dip-consumer/src/dip.rs | 6 +++--- dip-template/runtimes/dip-consumer/src/origin_adapter.rs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 7a2af7f12a..e99f3b9a7f 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -20,7 +20,7 @@ use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedChildKiltProviderVerifier, + traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedSiblingKiltProviderVerifier, }; use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; @@ -28,8 +28,8 @@ use sp_runtime::traits::BlakeTwo256; use crate::{DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; -pub type MerkleProofVerifierOutputOf = >::VerificationResult; -pub type ProofVerifier = VersionedChildKiltProviderVerifier< +pub type MerkleProofVerifierOutput = >::VerificationResult; +pub type ProofVerifier = VersionedSiblingKiltProviderVerifier< ProviderRuntime, Runtime, RelayStateRootsViaRelayStorePallet, diff --git a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs index f99b9d6156..d973367b33 100644 --- a/dip-template/runtimes/dip-consumer/src/origin_adapter.rs +++ b/dip-template/runtimes/dip-consumer/src/origin_adapter.rs @@ -16,7 +16,7 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutputOf, Runtime, RuntimeOrigin, Web3Name}; +use crate::{AccountId, DidIdentifier, MerkleProofVerifierOutput, RuntimeOrigin, Web3Name}; use frame_support::traits::EnsureOrigin; use pallet_dip_consumer::{DipOrigin, EnsureDipOrigin}; use pallet_postit::traits::Usernamable; @@ -41,7 +41,7 @@ impl EnsureOrigin for EnsureDipOriginAdapter { } #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct DipOriginAdapter(DipOrigin>); +pub struct DipOriginAdapter(DipOrigin); impl Usernamable for DipOriginAdapter { type Username = Web3Name; From 6bba8829dfe98e2dd0fd3679c79cb69edb3133ea Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Wed, 8 Nov 2023 17:46:31 +0100 Subject: [PATCH 41/46] Fix wrong fixes --- crates/kilt-dip-support/src/export/child.rs | 72 ++++++++----------- crates/kilt-dip-support/src/export/mod.rs | 9 +-- crates/kilt-dip-support/src/export/sibling.rs | 69 ++++++++---------- dip-template/runtimes/dip-consumer/src/dip.rs | 6 +- 4 files changed, 66 insertions(+), 90 deletions(-) diff --git a/crates/kilt-dip-support/src/export/child.rs b/crates/kilt-dip-support/src/export/child.rs index 9229266429..6df44c2e49 100644 --- a/crates/kilt-dip-support/src/export/child.rs +++ b/crates/kilt-dip-support/src/export/child.rs @@ -118,23 +118,11 @@ where } } -struct KiltParachainId(PhantomData<(Runtime, Id)>); - -impl Get for KiltParachainId -where - Runtime: parachain_info::Config, - Id: From, -{ - fn get() -> Id { - parachain_info::Pallet::::parachain_id().into() - } -} - // Implements the same `IdentityProvider` trait, but it is internally configured // by receiving the runtime definitions of both the provider and the receiver. -pub struct VersionedChildKiltProviderVerifier< +pub struct KiltVersionedChildProviderVerifier< KiltRuntime, - ConsumerRuntime, + KiltParachainId, RelayChainInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -144,7 +132,7 @@ pub struct VersionedChildKiltProviderVerifier< >( PhantomData<( KiltRuntime, - ConsumerRuntime, + KiltParachainId, RelayChainInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -152,8 +140,9 @@ pub struct VersionedChildKiltProviderVerifier< ); impl< - KiltRuntime, ConsumerRuntime, + KiltRuntime, + KiltParachainId, RelayChainInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -161,9 +150,9 @@ impl< const MAX_REVEALED_ACCOUNTS_COUNT: u32, const MAX_DID_SIGNATURE_DURATION: u16, > IdentityProofVerifier - for VersionedChildKiltProviderVerifier< + for KiltVersionedChildProviderVerifier< KiltRuntime, - ConsumerRuntime, + KiltParachainId, RelayChainInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -176,6 +165,7 @@ impl< + pallet_did_lookup::Config + parachain_info::Config + pallet_dip_provider::Config, + KiltParachainId: Get, OutputOf: Ord + From::Hasher>>, KeyIdOf: Into, KiltDipMerkleHasher: sp_core::Hasher>, @@ -245,28 +235,26 @@ impl< identity_details: &mut Option, proof: Self::Proof, ) -> Result { - match proof { - VersionedChildParachainDipStateProof::V0(v0_proof) => , - ProviderParachainStateInfoViaProviderPallet, - KiltDipMerkleHasher, - KeyIdOf, - KiltRuntime::AccountId, - KiltRuntime::Web3Name, - LinkableAccountId, - MAX_REVEALED_KEYS_COUNT, - MAX_REVEALED_ACCOUNTS_COUNT, - FrameSystemDidSignatureContext, - LocalDidCallVerifier, - > as IdentityProofVerifier>::verify_proof_for_call_against_details( - call, - subject, - submitter, - identity_details, - v0_proof, - ), - } + , + KiltDipMerkleHasher, + KeyIdOf, + KiltRuntime::AccountId, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + FrameSystemDidSignatureContext, + LocalDidCallVerifier, + > as IdentityProofVerifier>::verify_proof_for_call_against_details( + call, + subject, + submitter, + identity_details, + proof, + ) } } @@ -274,7 +262,7 @@ impl< // used in cases in which it is not possible or not desirable to depend on the // whole provider runtime definition. Hence, required types must be filled in // manually. -pub struct VersionedDipChildProviderStateProofVerifier< +pub struct GenericVersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, @@ -318,7 +306,7 @@ impl< LocalContextProvider, LocalDidCallVerifier, > IdentityProofVerifier - for VersionedDipChildProviderStateProofVerifier< + for GenericVersionedDipChildProviderStateProofVerifier< RelayChainInfo, ChildProviderParachainId, ChildProviderStateInfo, diff --git a/crates/kilt-dip-support/src/export/mod.rs b/crates/kilt-dip-support/src/export/mod.rs index 0e90a3d6e7..8d2f289926 100644 --- a/crates/kilt-dip-support/src/export/mod.rs +++ b/crates/kilt-dip-support/src/export/mod.rs @@ -16,15 +16,16 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -mod child; +pub mod child; +pub mod sibling; + mod common; -mod sibling; pub use child::{ - DipChildProviderStateProofVerifierError, VersionedChildKiltProviderVerifier, VersionedChildParachainDipStateProof, + DipChildProviderStateProofVerifierError, KiltVersionedChildProviderVerifier, VersionedChildParachainDipStateProof, }; pub use sibling::{ - DipSiblingProviderStateProofVerifierError, VersionedSiblingKiltProviderVerifier, + DipSiblingProviderStateProofVerifierError, KiltVersionedSiblingProviderVerifier, VersionedSiblingParachainDipStateProof, }; diff --git a/crates/kilt-dip-support/src/export/sibling.rs b/crates/kilt-dip-support/src/export/sibling.rs index 39d1c6acfb..5f82560104 100644 --- a/crates/kilt-dip-support/src/export/sibling.rs +++ b/crates/kilt-dip-support/src/export/sibling.rs @@ -110,24 +110,11 @@ where } } } - -struct KiltParachainId(PhantomData<(Runtime, Id)>); - -impl Get for KiltParachainId -where - Runtime: parachain_info::Config, - Id: From, -{ - fn get() -> Id { - parachain_info::Pallet::::parachain_id().into() - } -} - // Implements the same `IdentityProvider` trait, but it is internally configured // by receiving the runtime definitions of both the provider and the receiver. -pub struct VersionedSiblingKiltProviderVerifier< +pub struct KiltVersionedSiblingProviderVerifier< KiltRuntime, - ConsumerRuntime, + KiltParachainId, RelayChainStateInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -137,7 +124,7 @@ pub struct VersionedSiblingKiltProviderVerifier< >( PhantomData<( KiltRuntime, - ConsumerRuntime, + KiltParachainId, RelayChainStateInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -145,8 +132,9 @@ pub struct VersionedSiblingKiltProviderVerifier< ); impl< - KiltRuntime, ConsumerRuntime, + KiltRuntime, + KiltParachainId, RelayChainStateInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -154,9 +142,9 @@ impl< const MAX_REVEALED_ACCOUNTS_COUNT: u32, const MAX_DID_SIGNATURE_DURATION: u16, > IdentityProofVerifier - for VersionedSiblingKiltProviderVerifier< + for KiltVersionedSiblingProviderVerifier< KiltRuntime, - ConsumerRuntime, + KiltParachainId, RelayChainStateInfo, KiltDipMerkleHasher, LocalDidCallVerifier, @@ -169,6 +157,7 @@ impl< + pallet_did_lookup::Config + parachain_info::Config + pallet_dip_provider::Config, + KiltParachainId: Get, OutputOf: Ord + From>, KeyIdOf: Into, KiltDipMerkleHasher: sp_core::Hasher>, @@ -221,28 +210,26 @@ impl< identity_details: &mut Option, proof: Self::Proof, ) -> Result { - match proof { - VersionedSiblingParachainDipStateProof::V0(v0_proof) => , - ProviderParachainStateInfoViaProviderPallet, - KiltDipMerkleHasher, - KeyIdOf, - KiltRuntime::AccountId, - KiltRuntime::Web3Name, - LinkableAccountId, - MAX_REVEALED_KEYS_COUNT, - MAX_REVEALED_ACCOUNTS_COUNT, - FrameSystemDidSignatureContext, - LocalDidCallVerifier, - > as IdentityProofVerifier>::verify_proof_for_call_against_details( - call, - subject, - submitter, - identity_details, - v0_proof, - ), - } + , + KiltDipMerkleHasher, + KeyIdOf, + KiltRuntime::AccountId, + KiltRuntime::Web3Name, + LinkableAccountId, + MAX_REVEALED_KEYS_COUNT, + MAX_REVEALED_ACCOUNTS_COUNT, + FrameSystemDidSignatureContext, + LocalDidCallVerifier, + > as IdentityProofVerifier>::verify_proof_for_call_against_details( + call, + subject, + submitter, + identity_details, + proof, + ) } } diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index e99f3b9a7f..19413ac7e6 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -20,7 +20,7 @@ use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; use frame_support::traits::Contains; use kilt_dip_support::{ - traits::DipCallOriginFilter, RelayStateRootsViaRelayStorePallet, VersionedSiblingKiltProviderVerifier, + traits::DipCallOriginFilter, KiltVersionedSiblingProviderVerifier, RelayStateRootsViaRelayStorePallet, }; use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; @@ -29,9 +29,9 @@ use sp_runtime::traits::BlakeTwo256; use crate::{DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutput = >::VerificationResult; -pub type ProofVerifier = VersionedSiblingKiltProviderVerifier< +pub type ProofVerifier = KiltVersionedSiblingProviderVerifier< ProviderRuntime, - Runtime, + ConstU32<2_000>, RelayStateRootsViaRelayStorePallet, BlakeTwo256, DipCallFilter, From 7cda0b653288c7c3392e9d463beee1cb5269e33c Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 9 Nov 2023 13:54:12 +0100 Subject: [PATCH 42/46] Consumer dispatch_as origin check parametrizable --- dip-template/runtimes/dip-consumer/src/dip.rs | 4 +++- pallets/pallet-dip-consumer/src/lib.rs | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dip-template/runtimes/dip-consumer/src/dip.rs b/dip-template/runtimes/dip-consumer/src/dip.rs index 19413ac7e6..db25e19333 100644 --- a/dip-template/runtimes/dip-consumer/src/dip.rs +++ b/dip-template/runtimes/dip-consumer/src/dip.rs @@ -19,6 +19,7 @@ use did::{did_details::DidVerificationKey, DidVerificationKeyRelationship}; use dip_provider_runtime_template::{AccountId as ProviderAccountId, Runtime as ProviderRuntime}; use frame_support::traits::Contains; +use frame_system::EnsureSigned; use kilt_dip_support::{ traits::DipCallOriginFilter, KiltVersionedSiblingProviderVerifier, RelayStateRootsViaRelayStorePallet, }; @@ -26,7 +27,7 @@ use pallet_dip_consumer::traits::IdentityProofVerifier; use sp_core::ConstU32; use sp_runtime::traits::BlakeTwo256; -use crate::{DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; +use crate::{AccountId, DidIdentifier, Runtime, RuntimeCall, RuntimeOrigin}; pub type MerkleProofVerifierOutput = >::VerificationResult; pub type ProofVerifier = KiltVersionedSiblingProviderVerifier< @@ -42,6 +43,7 @@ pub type ProofVerifier = KiltVersionedSiblingProviderVerifier< impl pallet_dip_consumer::Config for Runtime { type DipCallOriginFilter = PreliminaryDipOriginFilter; + type DispatchOriginCheck = EnsureSigned; type Identifier = DidIdentifier; type LocalIdentityInfo = u128; type ProofVerifier = ProofVerifier; diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index cf1b812499..0b95a3a5de 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -56,6 +56,8 @@ pub mod pallet { /// Preliminary filter to filter out calls before doing any heavier /// computations. type DipCallOriginFilter: Contains>; + /// The origin check for the `dispatch_as` call. + type DispatchOriginCheck: EnsureOrigin<::RuntimeOrigin, Success = Self::AccountId>; /// The identifier of a subject, e.g., a DID. type Identifier: Parameter + MaxEncodedLen; /// The details stored in this pallet associated with any given subject. @@ -99,9 +101,7 @@ pub mod pallet { proof: IdentityProofOf, call: Box>, ) -> DispatchResult { - // TODO: Make origin check configurable, and require that it at least returns - // the submitter's account. - let submitter = ensure_signed(origin)?; + let submitter = T::DispatchOriginCheck::ensure_origin(origin)?; ensure!(T::DipCallOriginFilter::contains(&*call), Error::::Filtered); let mut identity_entry = IdentityEntries::::get(&identifier); let proof_verification_result = T::ProofVerifier::verify_proof_for_call_against_details( From 8eceddb3f098b70fb5890cc421ed2ebf1c9f498f Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Thu, 9 Nov 2023 16:09:59 +0100 Subject: [PATCH 43/46] Cleanup --- pallets/pallet-dip-consumer/src/lib.rs | 2 -- pallets/pallet-dip-provider/src/lib.rs | 8 ++------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index 0b95a3a5de..d02fea74d0 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -75,8 +75,6 @@ pub mod pallet { #[pallet::error] pub enum Error { - /// An identity with the provided identifier could not be found. - IdentityNotFound, /// The identity proof provided could not be successfully verified. InvalidProof(u16), /// The specified call is filtered by the DIP call origin filter. diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index f3020f6ee2..beeaf2fd70 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -72,7 +72,7 @@ pub mod pallet { #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { - IdentityCommitted { + VersionedIdentityCommitted { identifier: T::Identifier, commitment: IdentityCommitmentOf, version: IdentityCommitmentVersion, @@ -81,15 +81,11 @@ pub mod pallet { identifier: T::Identifier, version: IdentityCommitmentVersion, }, - IdentityDeleted { - identifier: T::Identifier, - }, } #[pallet::error] pub enum Error { IdentityNotFound, - LimitTooLow, IdentityProvider(u16), IdentityCommitmentGenerator(u16), Hook(u16), @@ -135,7 +131,7 @@ pub mod pallet { T::ProviderHooks::on_identity_committed(&identifier, &dispatcher, &commitment, commitment_version) .map_err(|e| Error::::Hook(e.into()))?; *commitment_entry = Some(commitment.clone()); - Self::deposit_event(Event::::IdentityCommitted { + Self::deposit_event(Event::::VersionedIdentityCommitted { identifier: identifier.clone(), commitment, version: commitment_version, From 467d8df73ac974ec6dab2516f306a7e5b4449ecc Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Mon, 13 Nov 2023 12:50:52 +0100 Subject: [PATCH 44/46] Fix fmt --- pallets/pallet-dip-consumer/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pallets/pallet-dip-consumer/src/lib.rs b/pallets/pallet-dip-consumer/src/lib.rs index d02fea74d0..e3a0a2133b 100644 --- a/pallets/pallet-dip-consumer/src/lib.rs +++ b/pallets/pallet-dip-consumer/src/lib.rs @@ -25,8 +25,7 @@ pub mod traits; mod origin; -pub use crate::{origin::*, pallet::*}; -pub use traits::SuccessfulProofVerifier; +pub use crate::{origin::*, pallet::*, traits::SuccessfulProofVerifier}; #[frame_support::pallet(dev_mode)] pub mod pallet { From 1e338a414a8bf1a170f552036d42240fc101e440 Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Mon, 13 Nov 2023 17:29:57 +0100 Subject: [PATCH 45/46] Improve identity provider flow --- crates/kilt-dip-support/src/utils.rs | 120 ----------------- dip-template/runtimes/dip-provider/src/dip.rs | 9 +- dip-template/runtimes/dip-provider/src/lib.rs | 3 +- pallets/pallet-dip-provider/src/lib.rs | 24 ++-- pallets/pallet-dip-provider/src/traits.rs | 21 +-- runtimes/common/src/dip/did.rs | 124 ++++++++---------- runtimes/common/src/dip/merkle.rs | 75 +++++------ 7 files changed, 107 insertions(+), 269 deletions(-) diff --git a/crates/kilt-dip-support/src/utils.rs b/crates/kilt-dip-support/src/utils.rs index 335a0a25e2..e382093b93 100644 --- a/crates/kilt-dip-support/src/utils.rs +++ b/crates/kilt-dip-support/src/utils.rs @@ -16,124 +16,4 @@ // If you feel like getting in touch with us, you can do so at info@botlabs.org -use pallet_dip_provider::traits::IdentityProvider; -use parity_scale_codec::{Decode, Encode}; -use scale_info::TypeInfo; -use sp_std::marker::PhantomData; - -pub struct CombinedIdentityResult { - pub a: OutputA, - pub b: OutputB, - pub c: OutputC, -} - -impl From<(OutputA, OutputB, OutputC)> - for CombinedIdentityResult -{ - fn from(value: (OutputA, OutputB, OutputC)) -> Self { - Self { - a: value.0, - b: value.1, - c: value.2, - } - } -} - -impl CombinedIdentityResult -where - OutputB: Default, - OutputC: Default, -{ - pub fn from_a(a: OutputA) -> Self { - Self { - a, - b: OutputB::default(), - c: OutputC::default(), - } - } -} - -impl CombinedIdentityResult -where - OutputA: Default, - OutputC: Default, -{ - pub fn from_b(b: OutputB) -> Self { - Self { - a: OutputA::default(), - b, - c: OutputC::default(), - } - } -} - -impl CombinedIdentityResult -where - OutputA: Default, - OutputB: Default, -{ - pub fn from_c(c: OutputC) -> Self { - Self { - a: OutputA::default(), - b: OutputB::default(), - c, - } - } -} - -pub struct CombineIdentityFrom(PhantomData<(A, B, C)>); - -#[derive(Encode, Decode, TypeInfo)] -pub enum CombineError { - A(ErrorA), - B(ErrorB), - C(ErrorC), -} - -impl From> for u16 -where - ErrorA: Into, - ErrorB: Into, - ErrorC: Into, -{ - fn from(value: CombineError) -> Self { - match value { - CombineError::A(error) => error.into(), - CombineError::B(error) => error.into(), - CombineError::C(error) => error.into(), - } - } -} - -impl IdentityProvider for CombineIdentityFrom -where - Runtime: pallet_dip_provider::Config, - A: IdentityProvider, - B: IdentityProvider, - C: IdentityProvider, -{ - type Error = CombineError; - type Success = CombinedIdentityResult, Option, Option>; - - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { - match ( - A::retrieve(identifier), - B::retrieve(identifier), - C::retrieve(identifier), - ) { - // If no details is returned, return None for the whole result - (Ok(None), Ok(None), Ok(None)) => Ok(None), - // Otherwise, return `Some` or `None` depending on each result - (Ok(ok_a), Ok(ok_b), Ok(ok_c)) => Ok(Some(CombinedIdentityResult { - a: ok_a, - b: ok_b, - c: ok_c, - })), - (Err(e), _, _) => Err(CombineError::A(e)), - (_, Err(e), _) => Err(CombineError::B(e)), - (_, _, Err(e)) => Err(CombineError::C(e)), - } - } -} - pub type OutputOf = ::Output; diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 998d3e3073..4aac27ec95 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -19,10 +19,10 @@ use did::{DidRawOrigin, EnsureDidOrigin, KeyIdOf}; use frame_system::EnsureSigned; use pallet_did_lookup::linkable_account::LinkableAccountId; -use pallet_dip_provider::{traits::IdentityProvider, IdentityCommitmentVersion}; +use pallet_dip_provider::IdentityCommitmentVersion; use parity_scale_codec::{Decode, Encode}; use runtime_common::dip::{ - did::LinkedDidInfoProviderOf, + did::{LinkedDidInfoProvider, LinkedDidInfoProviderError}, merkle::{DidMerkleProofError, DidMerkleRootGenerator}, }; use scale_info::TypeInfo; @@ -48,8 +48,7 @@ pub mod runtime_api { #[derive(Encode, Decode, TypeInfo)] pub enum DipProofError { - IdentityNotFound, - IdentityProviderError( as IdentityProvider>::Error), + IdentityProviderError(LinkedDidInfoProviderError), MerkleProofError(DidMerkleProofError), } } @@ -141,7 +140,7 @@ impl pallet_dip_provider::Config for Runtime { type CommitOrigin = DidRawOrigin; type Identifier = DidIdentifier; type IdentityCommitmentGenerator = DidMerkleRootGenerator; - type IdentityProvider = LinkedDidInfoProviderOf; + type IdentityProvider = LinkedDidInfoProvider; type ProviderHooks = deposit::DepositCollectorHooks; type RuntimeEvent = RuntimeEvent; } diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index 94e58c36c4..ee0c0b44cc 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -571,8 +571,7 @@ impl_runtime_apis! { impl kilt_runtime_api_dip_provider::DipProvider>, runtime_api::DipProofError> for Runtime { fn generate_proof(request: runtime_api::DipProofRequest) -> Result>, runtime_api::DipProofError> { - let maybe_identity_details = IdentityProviderOf::::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProviderError)?; - let identity_details = maybe_identity_details.ok_or(runtime_api::DipProofError::IdentityNotFound)?; + let identity_details = IdentityProviderOf::::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProviderError)?; DidMerkleRootGenerator::::generate_proof(&identity_details, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProofError) } diff --git a/pallets/pallet-dip-provider/src/lib.rs b/pallets/pallet-dip-provider/src/lib.rs index beeaf2fd70..45ac1d34da 100644 --- a/pallets/pallet-dip-provider/src/lib.rs +++ b/pallets/pallet-dip-provider/src/lib.rs @@ -22,8 +22,10 @@ pub mod traits; -pub use crate::pallet::*; -pub use traits::{DefaultIdentityCommitmentGenerator, DefaultIdentityProvider, NoneIdentityProvider, NoopHooks}; +pub use crate::{ + pallet::*, + traits::{DefaultIdentityCommitmentGenerator, DefaultIdentityProvider, NoopHooks}, +}; #[frame_support::pallet(dev_mode)] pub mod pallet { @@ -85,7 +87,7 @@ pub mod pallet { #[pallet::error] pub enum Error { - IdentityNotFound, + CommitmentNotFound, IdentityProvider(u16), IdentityCommitmentGenerator(u16), Hook(u16), @@ -105,14 +107,11 @@ pub mod pallet { T::CommitOriginCheck::ensure_origin(origin).map(|e: ::CommitOrigin| e.submitter())?; let commitment_version = version.unwrap_or(LATEST_COMMITMENT_VERSION); - let commitment = match T::IdentityProvider::retrieve(&identifier) { - Ok(None) => Err(Error::::IdentityNotFound), - Err(error) => Err(Error::::IdentityProvider(error.into())), - Ok(Some(identity)) => { - T::IdentityCommitmentGenerator::generate_commitment(&identifier, &identity, commitment_version) - .map_err(|error| Error::::IdentityCommitmentGenerator(error.into())) - } - }?; + let identity = T::IdentityProvider::retrieve(&identifier) + .map_err(|error| Error::::IdentityProvider(error.into()))?; + let commitment = + T::IdentityCommitmentGenerator::generate_commitment(&identifier, &identity, commitment_version) + .map_err(|error| Error::::IdentityCommitmentGenerator(error.into()))?; IdentityCommitments::::try_mutate(&identifier, commitment_version, |commitment_entry| { if let Some(old_commitment) = commitment_entry { @@ -165,7 +164,8 @@ pub mod pallet { identifier: &T::Identifier, version: IdentityCommitmentVersion, ) -> Result, DispatchError> { - let commitment = IdentityCommitments::::take(identifier, version).ok_or(Error::::IdentityNotFound)?; + let commitment = + IdentityCommitments::::take(identifier, version).ok_or(Error::::CommitmentNotFound)?; Self::deposit_event(Event::::VersionedIdentityDeleted { identifier: identifier.clone(), version, diff --git a/pallets/pallet-dip-provider/src/traits.rs b/pallets/pallet-dip-provider/src/traits.rs index 91a892fab0..8cf5c09146 100644 --- a/pallets/pallet-dip-provider/src/traits.rs +++ b/pallets/pallet-dip-provider/src/traits.rs @@ -34,7 +34,7 @@ pub mod identity_provision { type Error: Into; type Success; - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error>; + fn retrieve(identifier: &Runtime::Identifier) -> Result; } // Return the `Default` value if `Identity` adn `Details` both implement it. @@ -48,23 +48,8 @@ pub mod identity_provision { type Error = u16; type Success = Identity; - fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { - Ok(Some(Identity::default())) - } - } - - // Always return `None`. Might be useful for tests. - pub struct NoneIdentityProvider; - - impl IdentityProvider for NoneIdentityProvider - where - Runtime: Config, - { - type Error = u16; - type Success = (); - - fn retrieve(_identifier: &Runtime::Identifier) -> Result, Self::Error> { - Ok(None) + fn retrieve(_identifier: &Runtime::Identifier) -> Result { + Ok(Identity::default()) } } } diff --git a/runtimes/common/src/dip/did.rs b/runtimes/common/src/dip/did.rs index 904ddc1e61..134c65de9b 100644 --- a/runtimes/common/src/dip/did.rs +++ b/runtimes/common/src/dip/did.rs @@ -18,101 +18,83 @@ use did::did_details::DidDetails; use frame_system::pallet_prelude::BlockNumberFor; -use kilt_dip_support::{ - merkle::RevealedWeb3Name, - utils::{CombineIdentityFrom, CombinedIdentityResult}, -}; +use kilt_dip_support::merkle::RevealedWeb3Name; use pallet_did_lookup::linkable_account::LinkableAccountId; use pallet_dip_provider::traits::IdentityProvider; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; -use sp_std::{marker::PhantomData, vec::Vec}; +use sp_std::vec::Vec; #[derive(Encode, Decode, TypeInfo)] -pub enum DidIdentityProviderError { +pub enum LinkedDidInfoProviderError { DidNotFound, + DidDeleted, Internal, } -impl From for u16 { - fn from(value: DidIdentityProviderError) -> Self { +impl From for u16 { + fn from(value: LinkedDidInfoProviderError) -> Self { match value { - DidIdentityProviderError::DidNotFound => 0, - DidIdentityProviderError::Internal => u16::MAX, + LinkedDidInfoProviderError::DidNotFound => 0, + LinkedDidInfoProviderError::DidDeleted => 1, + LinkedDidInfoProviderError::Internal => u16::MAX, } } } -pub struct DidIdentityProvider(PhantomData); +pub type Web3OwnershipOf = + RevealedWeb3Name<::Web3Name, BlockNumberFor>; -impl IdentityProvider for DidIdentityProvider +pub struct LinkedDidInfoOf where - Runtime: - did::Config::Identifier> + pallet_dip_provider::Config, + Runtime: did::Config + pallet_web3_names::Config, { - type Error = DidIdentityProviderError; - type Success = DidDetails; - - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { - match ( - did::Pallet::::get_did(identifier), - did::Pallet::::get_deleted_did(identifier), - ) { - (Some(details), _) => Ok(Some(details)), - (_, Some(_)) => Ok(None), - _ => Err(DidIdentityProviderError::DidNotFound), - } - } + pub did_details: DidDetails, + pub web3_name_details: Option>, + pub linked_accounts: Vec, } -pub type Web3OwnershipOf = RevealedWeb3Name<::Web3Name, BlockNumberFor>; - -pub struct DidWeb3NameProvider(PhantomData); +pub struct LinkedDidInfoProvider; -impl IdentityProvider for DidWeb3NameProvider +impl IdentityProvider for LinkedDidInfoProvider where - Runtime: pallet_web3_names::Config::Identifier> + Runtime: did::Config::Identifier> + + pallet_web3_names::Config::Identifier> + + pallet_did_lookup::Config::Identifier> + pallet_dip_provider::Config, { - type Error = DidIdentityProviderError; - type Success = Web3OwnershipOf; - - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { - let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) else { - return Ok(None); - }; - let Some(details) = pallet_web3_names::Pallet::::owner(&web3_name) else { - log::error!( - "Inconsistent reverse map pallet_web3_names::owner(web3_name). Cannot find owner for web3name {:#?}", - web3_name - ); - return Err(DidIdentityProviderError::Internal); - }; - Ok(Some(Web3OwnershipOf:: { - web3_name, - claimed_at: details.claimed_at, - })) - } -} + type Error = LinkedDidInfoProviderError; + type Success = LinkedDidInfoOf; -pub struct DidLinkedAccountsProvider(PhantomData); - -impl IdentityProvider for DidLinkedAccountsProvider -where - Runtime: pallet_did_lookup::Config::Identifier> - + pallet_dip_provider::Config, -{ - type Error = DidIdentityProviderError; - type Success = Vec; - - fn retrieve(identifier: &Runtime::Identifier) -> Result, Self::Error> { - Ok(Some( - pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(), - )) + fn retrieve(identifier: &Runtime::Identifier) -> Result { + let did_details = match ( + did::Pallet::::get_did(identifier), + did::Pallet::::get_deleted_did(identifier), + ) { + (Some(details), _) => Ok(details), + (_, Some(_)) => Err(LinkedDidInfoProviderError::DidDeleted), + _ => Err(LinkedDidInfoProviderError::DidNotFound), + }?; + let web3_name_details = if let Some(web3_name) = pallet_web3_names::Pallet::::names(identifier) { + let Some(ownership) = pallet_web3_names::Pallet::::owner(&web3_name) else { + log::error!( + "Inconsistent reverse map pallet_web3_names::owner(web3_name). Cannot find owner for web3name {:#?}", + web3_name + ); + return Err(LinkedDidInfoProviderError::Internal); + }; + Ok(Some(Web3OwnershipOf:: { + web3_name, + claimed_at: ownership.claimed_at, + })) + } else { + Ok(None) + }?; + let linked_accounts = pallet_did_lookup::ConnectedAccounts::::iter_key_prefix(identifier).collect(); + Ok(LinkedDidInfoOf { + did_details, + web3_name_details, + linked_accounts, + }) } } - -pub type LinkedDidInfoProviderOf = - CombineIdentityFrom, DidWeb3NameProvider, DidLinkedAccountsProvider>; -pub type LinkedDidInfoOf = - CombinedIdentityResult>, Option>, Option>>; diff --git a/runtimes/common/src/dip/merkle.rs b/runtimes/common/src/dip/merkle.rs index 8ff730f771..ec62b3d6a8 100644 --- a/runtimes/common/src/dip/merkle.rs +++ b/runtimes/common/src/dip/merkle.rs @@ -54,7 +54,6 @@ pub struct CompleteMerkleProof { #[derive(Clone, RuntimeDebug, Encode, Decode, TypeInfo, PartialEq)] pub enum DidMerkleProofError { UnsupportedVersion, - DidNotFound, KeyNotFound, LinkedAccountNotFound, Web3NameNotFound, @@ -65,10 +64,9 @@ impl From for u16 { fn from(value: DidMerkleProofError) -> Self { match value { DidMerkleProofError::UnsupportedVersion => 0, - DidMerkleProofError::DidNotFound => 1, - DidMerkleProofError::KeyNotFound => 2, - DidMerkleProofError::LinkedAccountNotFound => 3, - DidMerkleProofError::Web3NameNotFound => 4, + DidMerkleProofError::KeyNotFound => 1, + DidMerkleProofError::LinkedAccountNotFound => 2, + DidMerkleProofError::Web3NameNotFound => 3, DidMerkleProofError::Internal => u16::MAX, } } @@ -92,10 +90,11 @@ pub mod v0 { where Runtime: did::Config + pallet_did_lookup::Config + pallet_web3_names::Config, { - // Fails if the DID details do not exist. - let (Some(did_details), web3_name, linked_accounts) = (&identity.a, &identity.b, &identity.c) else { - return Err(DidMerkleProofError::DidNotFound); - }; + let LinkedDidInfoOf { + did_details, + web3_name_details, + linked_accounts, + } = identity; let mut trie = TrieHash::>::default(); let mut trie_builder = TrieDBMutBuilder::>::new(db, &mut trie).build(); @@ -189,30 +188,28 @@ pub mod v0 { })?; // Linked accounts - if let Some(linked_accounts) = linked_accounts { - linked_accounts - .iter() - .try_for_each(|linked_account| -> Result<(), DidMerkleProofError> { - let linked_account_leaf = - ProofLeafOf::::LinkedAccount(linked_account.clone().into(), ().into()); - trie_builder - .insert( - linked_account_leaf.encoded_key().as_slice(), - linked_account_leaf.encoded_value().as_slice(), - ) - .map_err(|_| { - log::error!( - "Failed to insert linked account in the trie builder. Linked account leaf: {:#?}", - linked_account_leaf - ); - DidMerkleProofError::Internal - })?; - Ok(()) - })?; - } + linked_accounts + .iter() + .try_for_each(|linked_account| -> Result<(), DidMerkleProofError> { + let linked_account_leaf = + ProofLeafOf::::LinkedAccount(linked_account.clone().into(), ().into()); + trie_builder + .insert( + linked_account_leaf.encoded_key().as_slice(), + linked_account_leaf.encoded_value().as_slice(), + ) + .map_err(|_| { + log::error!( + "Failed to insert linked account in the trie builder. Linked account leaf: {:#?}", + linked_account_leaf + ); + DidMerkleProofError::Internal + })?; + Ok(()) + })?; // Web3name, if present - if let Some(web3name_details) = web3_name { + if let Some(web3name_details) = web3_name_details { let web3_name_leaf = ProofLeafOf::::Web3Name( web3name_details.web3_name.clone().into(), web3name_details.claimed_at.into(), @@ -246,10 +243,11 @@ pub mod v0 { K: Iterator>, A: Iterator, { - // Fails if the DID details do not exist. - let (Some(did_details), linked_web3_name, linked_accounts) = (&identity.a, &identity.b, &identity.c) else { - return Err(DidMerkleProofError::DidNotFound); - }; + let LinkedDidInfoOf { + did_details, + web3_name_details, + linked_accounts, + } = identity; let mut db = MemoryDB::default(); let root = calculate_root_with_db(identity, &mut db)?; @@ -281,11 +279,6 @@ pub mod v0 { )) }) .chain(account_ids.map(|account_id| -> Result<_, DidMerkleProofError> { - let Some(linked_accounts) = linked_accounts else { - // Directly LinkedAccountNotFound since there's no linked accounts to check - // against. - return Err(DidMerkleProofError::LinkedAccountNotFound); - }; if linked_accounts.contains(account_id) { Ok(RevealedDidMerkleProofLeaf::LinkedAccount( account_id.clone().into(), @@ -297,7 +290,7 @@ pub mod v0 { })) .collect::, _>>()?; - match (should_include_web3_name, linked_web3_name) { + match (should_include_web3_name, web3_name_details) { // If web3name should be included and it exists... (true, Some(web3name_details)) => { leaves.push(RevealedDidMerkleProofLeaf::Web3Name( From e23dbcc61e823e55d452c2430ab72d71d7b3fdce Mon Sep 17 00:00:00 2001 From: Antonio Antonino Date: Tue, 14 Nov 2023 16:31:26 +0100 Subject: [PATCH 46/46] Rename error --- dip-template/runtimes/dip-provider/src/dip.rs | 4 ++-- dip-template/runtimes/dip-provider/src/lib.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dip-template/runtimes/dip-provider/src/dip.rs b/dip-template/runtimes/dip-provider/src/dip.rs index 4aac27ec95..91c52a8c1b 100644 --- a/dip-template/runtimes/dip-provider/src/dip.rs +++ b/dip-template/runtimes/dip-provider/src/dip.rs @@ -48,8 +48,8 @@ pub mod runtime_api { #[derive(Encode, Decode, TypeInfo)] pub enum DipProofError { - IdentityProviderError(LinkedDidInfoProviderError), - MerkleProofError(DidMerkleProofError), + IdentityProvider(LinkedDidInfoProviderError), + MerkleProof(DidMerkleProofError), } } diff --git a/dip-template/runtimes/dip-provider/src/lib.rs b/dip-template/runtimes/dip-provider/src/lib.rs index ee0c0b44cc..cab15778cb 100644 --- a/dip-template/runtimes/dip-provider/src/lib.rs +++ b/dip-template/runtimes/dip-provider/src/lib.rs @@ -571,9 +571,9 @@ impl_runtime_apis! { impl kilt_runtime_api_dip_provider::DipProvider>, runtime_api::DipProofError> for Runtime { fn generate_proof(request: runtime_api::DipProofRequest) -> Result>, runtime_api::DipProofError> { - let identity_details = IdentityProviderOf::::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProviderError)?; + let identity_details = IdentityProviderOf::::retrieve(&request.identifier).map_err(runtime_api::DipProofError::IdentityProvider)?; - DidMerkleRootGenerator::::generate_proof(&identity_details, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProofError) + DidMerkleRootGenerator::::generate_proof(&identity_details, request.version, request.keys.iter(), request.should_include_web3_name, request.accounts.iter()).map_err(runtime_api::DipProofError::MerkleProof) } } }