From 53bd9b0d89e58e6a173e492023923affb84cfe84 Mon Sep 17 00:00:00 2001 From: Alain Brenzikofer Date: Thu, 28 Dec 2023 15:23:49 +0100 Subject: [PATCH 1/5] make_parentchain_pallet_instantiable --- Cargo.lock | 80 ++++++++++++++++++++-------------------- parentchain/src/lib.rs | 32 +++++++++------- parentchain/src/mock.rs | 16 ++++++-- parentchain/src/tests.rs | 72 ++++++++++++++++++++++++++++++++---- 4 files changed, 135 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 268f9dad..6a36c0c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -873,7 +873,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-support", "frame-support-procedural", @@ -910,7 +910,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "bitflags 1.3.2", "environmental", @@ -943,7 +943,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "Inflector", "cfg-expr", @@ -959,7 +959,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -971,7 +971,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "proc-macro2", "quote", @@ -981,7 +981,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-support", "log", @@ -1786,7 +1786,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-benchmarking", "frame-support", @@ -1955,7 +1955,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-benchmarking", "frame-support", @@ -1973,7 +1973,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-benchmarking", "frame-support", @@ -2813,7 +2813,7 @@ checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "hash-db", "log", @@ -2833,7 +2833,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "Inflector", "blake2", @@ -2847,7 +2847,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -2860,7 +2860,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "integer-sqrt", "num-traits", @@ -2874,7 +2874,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -2887,7 +2887,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -2899,7 +2899,7 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "array-bytes", "bitflags 1.3.2", @@ -2943,7 +2943,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "blake2b_simd", "byteorder", @@ -2957,7 +2957,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "proc-macro2", "quote", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "proc-macro2", "quote", @@ -2978,7 +2978,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "environmental", "parity-scale-codec", @@ -2989,7 +2989,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -3004,7 +3004,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "bytes", "ed25519", @@ -3030,7 +3030,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "lazy_static", "sp-core", @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "futures", "parity-scale-codec", @@ -3055,7 +3055,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -3066,7 +3066,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "backtrace", "lazy_static", @@ -3076,7 +3076,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "either", "hash256-std-hasher", @@ -3098,7 +3098,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -3116,7 +3116,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "Inflector", "proc-macro-crate", @@ -3128,7 +3128,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "hash-db", "log", @@ -3161,12 +3161,12 @@ dependencies = [ [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "impl-serde", "parity-scale-codec", @@ -3179,7 +3179,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "async-trait", "futures-timer", @@ -3194,7 +3194,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "sp-std", @@ -3206,7 +3206,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "ahash 0.8.6", "hash-db", @@ -3229,7 +3229,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "impl-serde", "parity-scale-codec", @@ -3246,7 +3246,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -3257,7 +3257,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -3271,7 +3271,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", diff --git a/parentchain/src/lib.rs b/parentchain/src/lib.rs index 9bdd993c..73534036 100644 --- a/parentchain/src/lib.rs +++ b/parentchain/src/lib.rs @@ -8,19 +8,23 @@ pub mod pallet { use frame_support::{pallet_prelude::*, sp_runtime::traits::Header}; use frame_system::pallet_prelude::*; + const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); #[pallet::pallet] - pub struct Pallet(_); + #[pallet::storage_version(STORAGE_VERSION)] + #[pallet::without_storage_info] + pub struct Pallet(PhantomData<(T, I)>); /// Configuration trait. #[pallet::config] - pub trait Config: frame_system::Config { - type RuntimeEvent: From> + IsType<::RuntimeEvent>; + pub trait Config: frame_system::Config { + type RuntimeEvent: From> + + IsType<::RuntimeEvent>; type WeightInfo: WeightInfo; } #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { + pub enum Event, I: 'static = ()> { /// a parentchain block has been registered SetBlock { block_number: T::BlockNumber, parent_hash: T::Hash, block_hash: T::Hash }, } @@ -28,30 +32,32 @@ pub mod pallet { /// The current block number being processed. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn block_number)] - pub(super) type Number = StorageValue<_, T::BlockNumber, ValueQuery>; + pub(super) type Number, I: 'static = ()> = + StorageValue<_, T::BlockNumber, ValueQuery>; /// Hash of the previous block. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn parent_hash)] - pub(super) type ParentHash = StorageValue<_, T::Hash, ValueQuery>; + pub(super) type ParentHash, I: 'static = ()> = + StorageValue<_, T::Hash, ValueQuery>; /// Hash of the last block. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn block_hash)] - pub(super) type BlockHash = StorageValue<_, T::Hash, ValueQuery>; + pub(super) type BlockHash, I: 'static = ()> = StorageValue<_, T::Hash, ValueQuery>; #[pallet::hooks] - impl Hooks> for Pallet {} + impl, I: 'static> Hooks> for Pallet {} #[pallet::call] - impl Pallet { + impl, I: 'static> Pallet { #[pallet::call_index(0)] - #[pallet::weight(::WeightInfo::set_block())] + #[pallet::weight(T::WeightInfo::set_block())] pub fn set_block(origin: OriginFor, header: T::Header) -> DispatchResult { ensure_root(origin)?; - >::put(header.number()); - >::put(header.parent_hash()); - >::put(header.hash()); + >::put(header.number()); + >::put(header.parent_hash()); + >::put(header.hash()); Self::deposit_event(Event::SetBlock { block_number: *header.number(), parent_hash: *header.parent_hash(), diff --git a/parentchain/src/mock.rs b/parentchain/src/mock.rs index 3e7af712..a9280e60 100644 --- a/parentchain/src/mock.rs +++ b/parentchain/src/mock.rs @@ -50,13 +50,21 @@ frame_support::construct_runtime!( NodeBlock = Block, UncheckedExtrinsic = UncheckedExtrinsic, { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - Parentchain: pallet_parentchain::{Pallet, Call, Storage, Event}, + System: frame_system::{Pallet, Call, Config, Event}, + Balances: pallet_balances::{Pallet, Call, Config, Event}, + ParentchainIntegritee: pallet_parentchain::::{Pallet, Call, Event}, + ParentchainTargetA: pallet_parentchain::::{Pallet, Call, Event}, } ); -impl Config for Test { +pub type ParentchainInstanceIntegritee = pallet_parentchain::Instance1; +impl Config for Test { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); +} + +pub type ParentchainInstanceTargetA = pallet_parentchain::Instance2; +impl Config for Test { type RuntimeEvent = RuntimeEvent; type WeightInfo = (); } diff --git a/parentchain/src/tests.rs b/parentchain/src/tests.rs index 79a858f2..e3fa3333 100644 --- a/parentchain/src/tests.rs +++ b/parentchain/src/tests.rs @@ -41,14 +41,67 @@ fn verify_storage_works() { let hash = header.hash(); new_test_ext().execute_with(|| { - assert_ok!(Parentchain::set_block(RuntimeOrigin::root(), header)); - assert_eq!(Parentchain::block_number(), block_number); - assert_eq!(Parentchain::parent_hash(), parent_hash); - assert_eq!(Parentchain::block_hash(), hash); + assert_ok!(ParentchainIntegritee::set_block(RuntimeOrigin::root(), header)); + assert_eq!(ParentchainIntegritee::block_number(), block_number); + assert_eq!(ParentchainIntegritee::parent_hash(), parent_hash); + assert_eq!(ParentchainIntegritee::block_hash(), hash); - System::assert_last_event( - ParentchainEvent::SetBlock { block_number, parent_hash, block_hash: hash }.into(), - ); + System::assert_last_event(RuntimeEvent::ParentchainIntegritee( + ParentchainEvent::SetBlock { block_number, parent_hash, block_hash: hash }, + )); + }) +} + +#[test] +fn multi_pallet_instance_storage_works() { + let block_number = 3; + let parent_hash = H256::from_low_u64_be(420); + + let header: Header = HeaderT::new( + block_number, + Default::default(), + Default::default(), + parent_hash, + Default::default(), + ); + let hash = header.hash(); + + let block_number_a = 5; + let parent_hash_a = H256::from_low_u64_be(421); + + let header_a: Header = HeaderT::new( + block_number_a, + Default::default(), + Default::default(), + parent_hash_a, + Default::default(), + ); + let hash_a = header_a.hash(); + + new_test_ext().execute_with(|| { + assert_ok!(ParentchainIntegritee::set_block(RuntimeOrigin::root(), header)); + assert_eq!(ParentchainIntegritee::block_number(), block_number); + assert_eq!(ParentchainIntegritee::parent_hash(), parent_hash); + assert_eq!(ParentchainIntegritee::block_hash(), hash); + + System::assert_last_event(RuntimeEvent::ParentchainIntegritee( + ParentchainEvent::SetBlock { block_number, parent_hash, block_hash: hash }, + )); + + assert_ok!(ParentchainTargetA::set_block(RuntimeOrigin::root(), header_a)); + assert_eq!(ParentchainTargetA::block_number(), block_number_a); + assert_eq!(ParentchainTargetA::parent_hash(), parent_hash_a); + assert_eq!(ParentchainTargetA::block_hash(), hash_a); + + System::assert_last_event(RuntimeEvent::ParentchainTargetA(ParentchainEvent::SetBlock { + block_number: block_number_a, + parent_hash: parent_hash_a, + block_hash: hash_a, + })); + + // double check previous storage + assert_eq!(ParentchainIntegritee::block_number(), block_number); + assert_eq!(ParentchainIntegritee::block_hash(), hash); }) } @@ -64,6 +117,9 @@ fn non_root_account_errs() { new_test_ext().execute_with(|| { let root = AccountKeyring::Ferdie.to_account_id(); - assert_err!(Parentchain::set_block(RuntimeOrigin::signed(root), header), BadOrigin); + assert_err!( + ParentchainIntegritee::set_block(RuntimeOrigin::signed(root), header), + BadOrigin + ); }) } From 6589497958c2d83b807a4036a37516fe0910c20c Mon Sep 17 00:00:00 2001 From: Alain Brenzikofer Date: Thu, 28 Dec 2023 15:41:21 +0100 Subject: [PATCH 2/5] init_shard_vault --- Cargo.lock | 82 ++++++++++++++++++++-------------------- parentchain/Cargo.toml | 2 +- parentchain/src/lib.rs | 38 +++++++++++++++++-- parentchain/src/tests.rs | 35 +++++++++++------ 4 files changed, 100 insertions(+), 57 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6a36c0c8..5ca05c8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -873,7 +873,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-support", "frame-support-procedural", @@ -910,7 +910,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "bitflags 1.3.2", "environmental", @@ -943,7 +943,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "Inflector", "cfg-expr", @@ -959,7 +959,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -971,7 +971,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "proc-macro2", "quote", @@ -981,7 +981,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-support", "log", @@ -1786,7 +1786,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-benchmarking", "frame-support", @@ -1851,7 +1851,7 @@ dependencies = [ [[package]] name = "pallet-parentchain" -version = "0.9.0" +version = "0.10.0" dependencies = [ "env_logger", "frame-support", @@ -1955,7 +1955,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-benchmarking", "frame-support", @@ -1973,7 +1973,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-benchmarking", "frame-support", @@ -2813,7 +2813,7 @@ checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "hash-db", "log", @@ -2833,7 +2833,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "Inflector", "blake2", @@ -2847,7 +2847,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -2860,7 +2860,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "integer-sqrt", "num-traits", @@ -2874,7 +2874,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -2887,7 +2887,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -2899,7 +2899,7 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "array-bytes", "bitflags 1.3.2", @@ -2943,7 +2943,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "blake2b_simd", "byteorder", @@ -2957,7 +2957,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "proc-macro2", "quote", @@ -2968,7 +2968,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "proc-macro2", "quote", @@ -2978,7 +2978,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "environmental", "parity-scale-codec", @@ -2989,7 +2989,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -3004,7 +3004,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "bytes", "ed25519", @@ -3030,7 +3030,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "lazy_static", "sp-core", @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "futures", "parity-scale-codec", @@ -3055,7 +3055,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.1.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -3066,7 +3066,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "backtrace", "lazy_static", @@ -3076,7 +3076,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "either", "hash256-std-hasher", @@ -3098,7 +3098,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -3116,7 +3116,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "Inflector", "proc-macro-crate", @@ -3128,7 +3128,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "hash-db", "log", @@ -3161,12 +3161,12 @@ dependencies = [ [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "impl-serde", "parity-scale-codec", @@ -3179,7 +3179,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "async-trait", "futures-timer", @@ -3194,7 +3194,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "sp-std", @@ -3206,7 +3206,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "ahash 0.8.6", "hash-db", @@ -3229,7 +3229,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "impl-serde", "parity-scale-codec", @@ -3246,7 +3246,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -3257,7 +3257,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -3271,7 +3271,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.42#ff24c60ac7d9f87727ecdd0ded9a80c56e4f4b65" dependencies = [ "parity-scale-codec", "scale-info", diff --git a/parentchain/Cargo.toml b/parentchain/Cargo.toml index e419e02d..959a8bee 100644 --- a/parentchain/Cargo.toml +++ b/parentchain/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "pallet-parentchain" description = "The remote attestation registry and verification pallet for integritee blockchains and parachains" -version = "0.9.0" +version = "0.10.0" authors = ["Integritee AG "] homepage = "https://integritee.network/" repository = "https://github.com/integritee-network/pallets/" diff --git a/parentchain/src/lib.rs b/parentchain/src/lib.rs index 73534036..b6fdb23c 100644 --- a/parentchain/src/lib.rs +++ b/parentchain/src/lib.rs @@ -26,25 +26,45 @@ pub mod pallet { #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event, I: 'static = ()> { /// a parentchain block has been registered - SetBlock { block_number: T::BlockNumber, parent_hash: T::Hash, block_hash: T::Hash }, + SetBlock { + block_number: T::BlockNumber, + parent_hash: T::Hash, + block_hash: T::Hash, + }, + ShardVaultInitialized { + account: T::AccountId, + }, } + #[pallet::error] + pub enum Error { + /// Sahrd vault has been previously initialized and can't be overwritten + ShardVaultAlreadyInitialized, + } + + /// The current block number being processed. Set by `set_block`. + #[pallet::storage] + #[pallet::getter(fn shard_vault)] + pub(super) type ShardVault, I: 'static = ()> = + StorageValue<_, T::AccountId, OptionQuery>; + /// The current block number being processed. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn block_number)] pub(super) type Number, I: 'static = ()> = - StorageValue<_, T::BlockNumber, ValueQuery>; + StorageValue<_, T::BlockNumber, OptionQuery>; /// Hash of the previous block. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn parent_hash)] pub(super) type ParentHash, I: 'static = ()> = - StorageValue<_, T::Hash, ValueQuery>; + StorageValue<_, T::Hash, OptionQuery>; /// Hash of the last block. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn block_hash)] - pub(super) type BlockHash, I: 'static = ()> = StorageValue<_, T::Hash, ValueQuery>; + pub(super) type BlockHash, I: 'static = ()> = + StorageValue<_, T::Hash, OptionQuery>; #[pallet::hooks] impl, I: 'static> Hooks> for Pallet {} @@ -65,6 +85,16 @@ pub mod pallet { }); Ok(()) } + + #[pallet::call_index(1)] + #[pallet::weight(T::WeightInfo::set_block())] + pub fn init_shard_vault(origin: OriginFor, account: T::AccountId) -> DispatchResult { + ensure_root(origin)?; + ensure!(Self::shard_vault().is_none(), Error::::ShardVaultAlreadyInitialized); + >::put(account.clone()); + Self::deposit_event(crate::pallet::Event::ShardVaultInitialized { account }); + Ok(()) + } } } diff --git a/parentchain/src/tests.rs b/parentchain/src/tests.rs index e3fa3333..afa8ad75 100644 --- a/parentchain/src/tests.rs +++ b/parentchain/src/tests.rs @@ -42,9 +42,9 @@ fn verify_storage_works() { new_test_ext().execute_with(|| { assert_ok!(ParentchainIntegritee::set_block(RuntimeOrigin::root(), header)); - assert_eq!(ParentchainIntegritee::block_number(), block_number); - assert_eq!(ParentchainIntegritee::parent_hash(), parent_hash); - assert_eq!(ParentchainIntegritee::block_hash(), hash); + assert_eq!(ParentchainIntegritee::block_number().unwrap(), block_number); + assert_eq!(ParentchainIntegritee::parent_hash().unwrap(), parent_hash); + assert_eq!(ParentchainIntegritee::block_hash().unwrap(), hash); System::assert_last_event(RuntimeEvent::ParentchainIntegritee( ParentchainEvent::SetBlock { block_number, parent_hash, block_hash: hash }, @@ -80,18 +80,18 @@ fn multi_pallet_instance_storage_works() { new_test_ext().execute_with(|| { assert_ok!(ParentchainIntegritee::set_block(RuntimeOrigin::root(), header)); - assert_eq!(ParentchainIntegritee::block_number(), block_number); - assert_eq!(ParentchainIntegritee::parent_hash(), parent_hash); - assert_eq!(ParentchainIntegritee::block_hash(), hash); + assert_eq!(ParentchainIntegritee::block_number().unwrap(), block_number); + assert_eq!(ParentchainIntegritee::parent_hash().unwrap(), parent_hash); + assert_eq!(ParentchainIntegritee::block_hash().unwrap(), hash); System::assert_last_event(RuntimeEvent::ParentchainIntegritee( ParentchainEvent::SetBlock { block_number, parent_hash, block_hash: hash }, )); assert_ok!(ParentchainTargetA::set_block(RuntimeOrigin::root(), header_a)); - assert_eq!(ParentchainTargetA::block_number(), block_number_a); - assert_eq!(ParentchainTargetA::parent_hash(), parent_hash_a); - assert_eq!(ParentchainTargetA::block_hash(), hash_a); + assert_eq!(ParentchainTargetA::block_number().unwrap(), block_number_a); + assert_eq!(ParentchainTargetA::parent_hash().unwrap(), parent_hash_a); + assert_eq!(ParentchainTargetA::block_hash().unwrap(), hash_a); System::assert_last_event(RuntimeEvent::ParentchainTargetA(ParentchainEvent::SetBlock { block_number: block_number_a, @@ -100,8 +100,8 @@ fn multi_pallet_instance_storage_works() { })); // double check previous storage - assert_eq!(ParentchainIntegritee::block_number(), block_number); - assert_eq!(ParentchainIntegritee::block_hash(), hash); + assert_eq!(ParentchainIntegritee::block_number().unwrap(), block_number); + assert_eq!(ParentchainIntegritee::block_hash().unwrap(), hash); }) } @@ -123,3 +123,16 @@ fn non_root_account_errs() { ); }) } + +#[test] +fn init_shard_vault_works() { + new_test_ext().execute_with(|| { + let vault = AccountKeyring::Alice.to_account_id(); + assert_ok!(ParentchainIntegritee::init_shard_vault(RuntimeOrigin::root(), vault.clone())); + assert_eq!(ParentchainIntegritee::shard_vault().unwrap(), vault); + + System::assert_last_event(RuntimeEvent::ParentchainIntegritee( + ParentchainEvent::ShardVaultInitialized { account: vault }, + )); + }) +} From 93580fd2444e786bf72ff554b3be2100c6ba7d59 Mon Sep 17 00:00:00 2001 From: Alain Brenzikofer Date: Thu, 28 Dec 2023 15:44:09 +0100 Subject: [PATCH 3/5] more testing --- parentchain/src/tests.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/parentchain/src/tests.rs b/parentchain/src/tests.rs index afa8ad75..baa3a9b4 100644 --- a/parentchain/src/tests.rs +++ b/parentchain/src/tests.rs @@ -14,8 +14,8 @@ limitations under the License. */ -use crate::{mock::*, Event as ParentchainEvent}; -use frame_support::{assert_err, assert_ok}; +use crate::{mock::*, Error, Event as ParentchainEvent}; +use frame_support::{assert_err, assert_noop, assert_ok}; use sp_core::H256; use sp_keyring::AccountKeyring; use sp_runtime::{ @@ -132,7 +132,11 @@ fn init_shard_vault_works() { assert_eq!(ParentchainIntegritee::shard_vault().unwrap(), vault); System::assert_last_event(RuntimeEvent::ParentchainIntegritee( - ParentchainEvent::ShardVaultInitialized { account: vault }, + ParentchainEvent::ShardVaultInitialized { account: vault.clone() }, )); + assert_noop!( + ParentchainIntegritee::init_shard_vault(RuntimeOrigin::root(), vault.clone()), + Error::::ShardVaultAlreadyInitialized + ); }) } From b4bcf34d306bcce23087d49964bbc9f2fc8c9da8 Mon Sep 17 00:00:00 2001 From: Alain Brenzikofer Date: Thu, 28 Dec 2023 16:08:16 +0100 Subject: [PATCH 4/5] unit test account mirror --- parentchain/Cargo.toml | 5 +++-- parentchain/src/lib.rs | 38 ++++++++++++++++++++++++++++++++++++-- parentchain/src/tests.rs | 31 +++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/parentchain/Cargo.toml b/parentchain/Cargo.toml index 959a8bee..e3b91c2c 100644 --- a/parentchain/Cargo.toml +++ b/parentchain/Cargo.toml @@ -16,7 +16,8 @@ serde = { version = "1.0.13", features = ["derive"], optional = true } # substrate dependencies frame-support = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } -frame-system = { default-features = false, package = "frame-system", git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } +pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } sp-core = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } sp-io = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } @@ -25,7 +26,6 @@ sp-std = { default-features = false, git = "https://github.com/paritytech/substr [dev-dependencies] env_logger = "0.9.0" sp-keyring = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } -pallet-balances = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.42" } [features] default = ["std"] @@ -37,6 +37,7 @@ std = [ # substrate dependencies "frame-support/std", "frame-system/std", + "pallet-balances/std", "sp-core/std", "sp-io/std", "sp-runtime/std", diff --git a/parentchain/src/lib.rs b/parentchain/src/lib.rs index b6fdb23c..7c3c586c 100644 --- a/parentchain/src/lib.rs +++ b/parentchain/src/lib.rs @@ -2,11 +2,18 @@ pub use pallet::*; +/// Index/Nonce type for parentchain runtime +type ParentchainIndex = u32; +/// Balance type for parentchain runtime +type ParentchainBalance = u128; +/// AccountData type for parentchain runtime +type ParentchainAccountData = pallet_balances::AccountData; + #[frame_support::pallet] pub mod pallet { - use crate::weights::WeightInfo; + use crate::{weights::WeightInfo, ParentchainAccountData, ParentchainIndex}; use frame_support::{pallet_prelude::*, sp_runtime::traits::Header}; - use frame_system::pallet_prelude::*; + use frame_system::{pallet_prelude::*, AccountInfo}; const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); #[pallet::pallet] @@ -34,6 +41,9 @@ pub mod pallet { ShardVaultInitialized { account: T::AccountId, }, + AccountInfoForcedFor { + account: T::AccountId, + }, } #[pallet::error] @@ -42,6 +52,17 @@ pub mod pallet { ShardVaultAlreadyInitialized, } + /// The parentchain mirror of full account information for a particular account ID. + #[pallet::storage] + #[pallet::getter(fn account)] + pub type Account, I: 'static = ()> = StorageMap< + _, + Blake2_128Concat, + T::AccountId, + AccountInfo, + ValueQuery, + >; + /// The current block number being processed. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn shard_vault)] @@ -95,6 +116,19 @@ pub mod pallet { Self::deposit_event(crate::pallet::Event::ShardVaultInitialized { account }); Ok(()) } + + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::set_block())] + pub fn force_account_info( + origin: OriginFor, + account: T::AccountId, + account_info: AccountInfo, + ) -> DispatchResult { + ensure_root(origin)?; + >::insert(&account, account_info); + Self::deposit_event(crate::pallet::Event::AccountInfoForcedFor { account }); + Ok(()) + } } } diff --git a/parentchain/src/tests.rs b/parentchain/src/tests.rs index baa3a9b4..6f750988 100644 --- a/parentchain/src/tests.rs +++ b/parentchain/src/tests.rs @@ -16,6 +16,8 @@ */ use crate::{mock::*, Error, Event as ParentchainEvent}; use frame_support::{assert_err, assert_noop, assert_ok}; +use frame_system::AccountInfo; +use pallet_balances::AccountData; use sp_core::H256; use sp_keyring::AccountKeyring; use sp_runtime::{ @@ -140,3 +142,32 @@ fn init_shard_vault_works() { ); }) } + +#[test] +fn force_account_info_works() { + new_test_ext().execute_with(|| { + let vault = AccountKeyring::Alice.to_account_id(); + let account_info = AccountInfo { + nonce: 42, + consumers: 1, + providers: 1, + sufficients: 1, + data: AccountData { + free: 123456789, + reserved: 23456, + frozen: 345, + flags: Default::default(), + }, + }; + assert_ok!(ParentchainIntegritee::force_account_info( + RuntimeOrigin::root(), + vault.clone(), + account_info.clone() + )); + assert_eq!(ParentchainIntegritee::account(&vault), account_info); + + System::assert_last_event(RuntimeEvent::ParentchainIntegritee( + ParentchainEvent::AccountInfoForcedFor { account: vault.clone() }, + )); + }) +} From 0c9e902b105339bdcab99da9b8918cee260391e4 Mon Sep 17 00:00:00 2001 From: Alain Brenzikofer Date: Thu, 28 Dec 2023 17:30:45 +0100 Subject: [PATCH 5/5] introduce parentchain genesis storage with write-once lock --- parentchain/src/lib.rs | 30 ++++++++++++++++++++++++++++-- parentchain/src/tests.rs | 18 ++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/parentchain/src/lib.rs b/parentchain/src/lib.rs index 7c3c586c..abb7d447 100644 --- a/parentchain/src/lib.rs +++ b/parentchain/src/lib.rs @@ -44,12 +44,17 @@ pub mod pallet { AccountInfoForcedFor { account: T::AccountId, }, + ParentchainGeneisInitialized { + hash: T::Hash, + }, } #[pallet::error] pub enum Error { /// Sahrd vault has been previously initialized and can't be overwritten ShardVaultAlreadyInitialized, + /// Parentchain genesis hash has already been initialized and can^t be overwritten + GenesisAlreadyInitialized, } /// The parentchain mirror of full account information for a particular account ID. @@ -69,6 +74,11 @@ pub mod pallet { pub(super) type ShardVault, I: 'static = ()> = StorageValue<_, T::AccountId, OptionQuery>; + #[pallet::storage] + #[pallet::getter(fn parentchain_genesis_hash)] + pub(super) type ParentchainGenesisHash, I: 'static = ()> = + StorageValue<_, T::Hash, OptionQuery>; + /// The current block number being processed. Set by `set_block`. #[pallet::storage] #[pallet::getter(fn block_number)] @@ -112,13 +122,29 @@ pub mod pallet { pub fn init_shard_vault(origin: OriginFor, account: T::AccountId) -> DispatchResult { ensure_root(origin)?; ensure!(Self::shard_vault().is_none(), Error::::ShardVaultAlreadyInitialized); - >::put(account.clone()); - Self::deposit_event(crate::pallet::Event::ShardVaultInitialized { account }); + >::put(account.clone()); + Self::deposit_event(Event::ShardVaultInitialized { account }); Ok(()) } #[pallet::call_index(2)] #[pallet::weight(T::WeightInfo::set_block())] + pub fn init_parentchain_genesis_hash( + origin: OriginFor, + genesis: T::Hash, + ) -> DispatchResult { + ensure_root(origin)?; + ensure!( + Self::parentchain_genesis_hash().is_none(), + Error::::GenesisAlreadyInitialized + ); + >::put(genesis); + Self::deposit_event(Event::ParentchainGeneisInitialized { hash: genesis }); + Ok(()) + } + + #[pallet::call_index(3)] + #[pallet::weight(T::WeightInfo::set_block())] pub fn force_account_info( origin: OriginFor, account: T::AccountId, diff --git a/parentchain/src/tests.rs b/parentchain/src/tests.rs index 6f750988..1970369a 100644 --- a/parentchain/src/tests.rs +++ b/parentchain/src/tests.rs @@ -142,7 +142,25 @@ fn init_shard_vault_works() { ); }) } +#[test] +fn init_parentchain_genesis_hash_works() { + new_test_ext().execute_with(|| { + let genesis = H256::default(); + assert_ok!(ParentchainIntegritee::init_parentchain_genesis_hash( + RuntimeOrigin::root(), + genesis + )); + assert_eq!(ParentchainIntegritee::parentchain_genesis_hash().unwrap(), genesis); + System::assert_last_event(RuntimeEvent::ParentchainIntegritee( + ParentchainEvent::ParentchainGeneisInitialized { hash: genesis }, + )); + assert_noop!( + ParentchainIntegritee::init_parentchain_genesis_hash(RuntimeOrigin::root(), genesis), + Error::::GenesisAlreadyInitialized + ); + }) +} #[test] fn force_account_info_works() { new_test_ext().execute_with(|| {