Add set custom header to Seedling Runtime (#846)

* before adding seedling client side

* seedling runtime compiles

* create seedling spec script added

* seedling node & BaseCallFilter fixes

* update AllPalets

* formatting

* CallFilter + SignedExtra + AccountData fix

* XCM removed

* cleanup

* solo-to-para pallet added & before testing

* fix runtime upgrade method

* soloToPara pallet + set header

* clean up

* clean up 2

* signed extension check sudo added

* fmt + cleanup

* Refac code and fixes

* fmt

* Update pallets/solo-to-para/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Update pallets/solo-to-para/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Update pallets/solo-to-para/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* small fixes

* OnValidationData used

* small changes

* Update pallets/solo-to-para/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Update pallets/solo-to-para/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Update pallets/solo-to-para/src/lib.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* OnValidationData replaced by OnSystemEvent

* fmt + cargo fix

* disable-default-bootnodes for seedling script

Co-authored-by: Ricardo Rius <ricardo@parity.io>
Co-authored-by: Ricardo Rius <9488369+riusricardo@users.noreply.github.com>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Ignacio Palacios
2022-01-14 14:21:10 +01:00
committed by GitHub
parent 60f5e0cf2d
commit 6f763b5e71
19 changed files with 285 additions and 45 deletions
+18 -1
View File
@@ -1686,6 +1686,7 @@ dependencies = [
"frame-support", "frame-support",
"frame-system", "frame-system",
"hex-literal 0.2.1", "hex-literal 0.2.1",
"impl-trait-for-tuples",
"lazy_static", "lazy_static",
"log", "log",
"pallet-balances", "pallet-balances",
@@ -1731,6 +1732,22 @@ dependencies = [
"sp-std", "sp-std",
] ]
[[package]]
name = "cumulus-pallet-solo-to-para"
version = "0.1.0"
dependencies = [
"cumulus-pallet-parachain-system",
"cumulus-primitives-core",
"frame-support",
"frame-system",
"pallet-sudo",
"parity-scale-codec",
"polkadot-primitives",
"scale-info",
"sp-runtime",
"sp-std",
]
[[package]] [[package]]
name = "cumulus-pallet-xcm" name = "cumulus-pallet-xcm"
version = "0.1.0" version = "0.1.0"
@@ -1790,7 +1807,6 @@ name = "cumulus-primitives-core"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"frame-support", "frame-support",
"impl-trait-for-tuples",
"parity-scale-codec", "parity-scale-codec",
"polkadot-core-primitives", "polkadot-core-primitives",
"polkadot-parachain", "polkadot-parachain",
@@ -9850,6 +9866,7 @@ name = "seedling-runtime"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cumulus-pallet-parachain-system", "cumulus-pallet-parachain-system",
"cumulus-pallet-solo-to-para",
"cumulus-primitives-core", "cumulus-primitives-core",
"frame-executive", "frame-executive",
"frame-support", "frame-support",
@@ -35,6 +35,7 @@ scale-info = { version = "1.0.0", default-features = false, features = ["derive"
serde = { version = "1.0.132", optional = true, features = ["derive"] } serde = { version = "1.0.132", optional = true, features = ["derive"] }
log = { version = "0.4.14", default-features = false } log = { version = "0.4.14", default-features = false }
environmental = { version = "1.1.2", default-features = false } environmental = { version = "1.1.2", default-features = false }
impl-trait-for-tuples = "0.2.1"
[dev-dependencies] [dev-dependencies]
# Other Dependencies # Other Dependencies
+22 -6
View File
@@ -30,7 +30,7 @@
use codec::Encode; use codec::Encode;
use cumulus_primitives_core::{ use cumulus_primitives_core::{
relay_chain, AbridgedHostConfiguration, ChannelStatus, CollationInfo, DmpMessageHandler, relay_chain, AbridgedHostConfiguration, ChannelStatus, CollationInfo, DmpMessageHandler,
GetChannelInfo, InboundDownwardMessage, InboundHrmpMessage, MessageSendError, OnValidationData, GetChannelInfo, InboundDownwardMessage, InboundHrmpMessage, MessageSendError,
OutboundHrmpMessage, ParaId, PersistedValidationData, UpwardMessage, UpwardMessageSender, OutboundHrmpMessage, ParaId, PersistedValidationData, UpwardMessage, UpwardMessageSender,
XcmpMessageHandler, XcmpMessageSource, XcmpMessageHandler, XcmpMessageSource,
}; };
@@ -105,7 +105,7 @@ pub mod pallet {
type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>; type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
/// Something which can be notified when the validation data is set. /// Something which can be notified when the validation data is set.
type OnValidationData: OnValidationData; type OnSystemEvent: OnSystemEvent;
/// Returns the parachain ID we are running with. /// Returns the parachain ID we are running with.
type SelfParaId: Get<ParaId>; type SelfParaId: Get<ParaId>;
@@ -329,6 +329,7 @@ pub mod pallet {
let validation_code = <PendingValidationCode<T>>::take(); let validation_code = <PendingValidationCode<T>>::take();
Self::put_parachain_code(&validation_code); Self::put_parachain_code(&validation_code);
<T::OnSystemEvent as OnSystemEvent>::on_validation_code_applied();
Self::deposit_event(Event::ValidationFunctionApplied(vfp.relay_parent_number)); Self::deposit_event(Event::ValidationFunctionApplied(vfp.relay_parent_number));
}, },
Some(relay_chain::v1::UpgradeGoAhead::Abort) => { Some(relay_chain::v1::UpgradeGoAhead::Abort) => {
@@ -354,7 +355,7 @@ pub mod pallet {
<RelevantMessagingState<T>>::put(relevant_messaging_state.clone()); <RelevantMessagingState<T>>::put(relevant_messaging_state.clone());
<HostConfiguration<T>>::put(host_config); <HostConfiguration<T>>::put(host_config);
<T::OnValidationData as OnValidationData>::on_validation_data(&vfp); <T::OnSystemEvent as OnSystemEvent>::on_validation_data(&vfp);
// TODO: This is more than zero, but will need benchmarking to figure out what. // TODO: This is more than zero, but will need benchmarking to figure out what.
let mut total_weight = 0; let mut total_weight = 0;
@@ -397,7 +398,7 @@ pub mod pallet {
code: Vec<u8>, code: Vec<u8>,
) -> DispatchResultWithPostInfo { ) -> DispatchResultWithPostInfo {
Self::validate_authorized_upgrade(&code[..])?; Self::validate_authorized_upgrade(&code[..])?;
Self::set_code_impl(code)?; Self::schedule_code_upgrade(code)?;
AuthorizedUpgrade::<T>::kill(); AuthorizedUpgrade::<T>::kill();
Ok(Pays::No.into()) Ok(Pays::No.into())
} }
@@ -883,7 +884,7 @@ impl<T: Config> Pallet<T> {
} }
/// The implementation of the runtime upgrade functionality for parachains. /// The implementation of the runtime upgrade functionality for parachains.
fn set_code_impl(validation_function: Vec<u8>) -> DispatchResult { pub fn schedule_code_upgrade(validation_function: Vec<u8>) -> DispatchResult {
// Ensure that `ValidationData` exists. We do not care about the validation data per se, // Ensure that `ValidationData` exists. We do not care about the validation data per se,
// but we do care about the [`UpgradeRestrictionSignal`] which arrives with the same inherent. // but we do care about the [`UpgradeRestrictionSignal`] which arrives with the same inherent.
ensure!(<ValidationData<T>>::exists(), Error::<T>::ValidationDataNotAvailable,); ensure!(<ValidationData<T>>::exists(), Error::<T>::ValidationDataNotAvailable,);
@@ -949,7 +950,7 @@ pub struct ParachainSetCode<T>(sp_std::marker::PhantomData<T>);
impl<T: Config> frame_system::SetCode<T> for ParachainSetCode<T> { impl<T: Config> frame_system::SetCode<T> for ParachainSetCode<T> {
fn set_code(code: Vec<u8>) -> DispatchResult { fn set_code(code: Vec<u8>) -> DispatchResult {
Pallet::<T>::set_code_impl(code) Pallet::<T>::schedule_code_upgrade(code)
} }
} }
@@ -1007,6 +1008,21 @@ pub trait CheckInherents<Block: BlockT> {
) -> frame_support::inherent::CheckInherentsResult; ) -> frame_support::inherent::CheckInherentsResult;
} }
/// Something that should be informed about system related events.
///
/// This includes events like [`on_validation_data`](Self::on_validation_data) that is being
/// called when the parachain inherent is executed that contains the validation data.
/// Or like [`on_validation_code_applied`](Self::on_validation_code_applied) that is called
/// when the new validation is written to the state. This means that
/// from the next block the runtime is being using this new code.
#[impl_trait_for_tuples::impl_for_tuples(30)]
pub trait OnSystemEvent {
/// Called in each blocks once when the validation data is set by the inherent.
fn on_validation_data(data: &PersistedValidationData);
/// Called when the validation code is being applied, aka from the next block on this is the new runtime.
fn on_validation_code_applied();
}
/// Implements [`BlockNumberProvider`] that returns relay chain block number fetched from /// Implements [`BlockNumberProvider`] that returns relay chain block number fetched from
/// validation data. /// validation data.
/// NTOE: When validation data is not available (e.g. within on_initialize), 0 will be returned. /// NTOE: When validation data is not available (e.g. within on_initialize), 0 will be returned.
@@ -100,7 +100,7 @@ impl frame_system::Config for Test {
} }
impl Config for Test { impl Config for Test {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = ParachainId; type SelfParaId = ParachainId;
type OutboundXcmpMessageSource = FromThreadLocal; type OutboundXcmpMessageSource = FromThreadLocal;
type DmpMessageHandler = SaveIntoThreadLocal; type DmpMessageHandler = SaveIntoThreadLocal;
+40
View File
@@ -0,0 +1,40 @@
[package]
name = "cumulus-pallet-solo-to-para"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2021"
description = "Adds functionality to migrate from a Solo to a Parachain"
[dependencies]
# Substrate dependencies
frame-support = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
frame-system = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
sp-std = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
sp-runtime = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
pallet-sudo = { git = "https://github.com/paritytech/substrate", default-features = false, branch = "master" }
# Cumulus dependencies
cumulus-pallet-parachain-system = { default-features = false, path = "../parachain-system" }
cumulus-primitives-core = { path = "../../primitives/core", default-features = false }
# Polkadot dependecies
polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" }
# Other Dependencies
codec = { package = "parity-scale-codec", version = "2.3.0", default-features = false, features = ["derive"]}
scale-info = { version = "1.0.0", default-features = false, features = ["derive"] }
[features]
default = [ "std" ]
std = [
"codec/std",
"scale-info/std",
"pallet-sudo/std",
"cumulus-pallet-parachain-system/std",
"cumulus-primitives-core/std",
"polkadot-primitives/std",
"frame-support/std",
"sp-runtime/std",
"sp-std/std",
"frame-system/std",
]
+181
View File
@@ -0,0 +1,181 @@
// Copyright 2022 Parity Technologies (UK) Ltd.
// This file is part of Cumulus.
// Cumulus 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.
// Cumulus 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 Cumulus. If not, see <http://www.gnu.org/licenses/>.
#![cfg_attr(not(feature = "std"), no_std)]
use codec::{Decode, Encode};
use cumulus_pallet_parachain_system as parachain_system;
use frame_support::{dispatch::DispatchResult, pallet_prelude::*, weights::DispatchInfo};
use frame_system::pallet_prelude::*;
pub use pallet::*;
use polkadot_primitives::v1::PersistedValidationData;
use scale_info::TypeInfo;
use sp_runtime::{
traits::{DispatchInfoOf, Dispatchable, SignedExtension},
transaction_validity::{
InvalidTransaction, TransactionLongevity, TransactionPriority, TransactionValidity,
TransactionValidityError, ValidTransaction,
},
};
use sp_std::{prelude::*, vec::Vec};
#[frame_support::pallet]
pub mod pallet {
use super::*;
#[pallet::config]
pub trait Config:
frame_system::Config + parachain_system::Config + pallet_sudo::Config
{
type Event: From<Event> + IsType<<Self as frame_system::Config>::Event>;
}
#[pallet::pallet]
#[pallet::generate_store(pub(super) trait Store)]
pub struct Pallet<T>(_);
/// In case of a scheduled migration, this storage field contains the custom head data to be applied.
#[pallet::storage]
pub(super) type PendingCustomValidationHeadData<T: Config> =
StorageValue<_, Vec<u8>, OptionQuery>;
#[pallet::event]
#[pallet::generate_deposit(pub(super) fn deposit_event)]
pub enum Event {
/// The custom validation head data has been scheduled to apply.
CustomValidationHeadDataStored,
/// The custom validation head data was applied as of the contained relay chain block number.
CustomValidationHeadDataApplied,
}
#[pallet::error]
pub enum Error<T> {
/// CustomHeadData is not stored in storage.
NoCustomHeadData,
}
#[pallet::call]
impl<T: Config> Pallet<T> {
#[pallet::weight(0)]
pub fn schedule_migration(
origin: OriginFor<T>,
code: Vec<u8>,
head_data: Vec<u8>,
) -> DispatchResult {
ensure_root(origin)?;
parachain_system::Pallet::<T>::schedule_code_upgrade(code)?;
Self::store_pending_custom_validation_head_data(head_data);
Ok(())
}
}
impl<T: Config> Pallet<T> {
/// Set a custom head data that should only be applied when upgradeGoAheadSignal from
/// the Relay Chain is GoAhead
fn store_pending_custom_validation_head_data(head_data: Vec<u8>) {
PendingCustomValidationHeadData::<T>::put(head_data);
Self::deposit_event(Event::CustomValidationHeadDataStored);
}
/// Set pending custom head data as head data that will be returned by `validate_block`. on the relay chain.
fn set_pending_custom_validation_head_data() {
if let Some(head_data) = <PendingCustomValidationHeadData<T>>::take() {
parachain_system::Pallet::<T>::set_custom_validation_head_data(head_data);
Self::deposit_event(Event::CustomValidationHeadDataApplied);
}
}
}
impl<T: Config> parachain_system::OnSystemEvent for Pallet<T> {
fn on_validation_data(_data: &PersistedValidationData) {}
fn on_validation_code_applied() {
crate::Pallet::<T>::set_pending_custom_validation_head_data();
}
}
/// Ensure that signed transactions are only valid if they are signed by root.
#[derive(Encode, Decode, Clone, Eq, PartialEq, TypeInfo, Default)]
#[scale_info(skip_type_params(T))]
pub struct CheckSudo<T: Config + Send + Sync>(sp_std::marker::PhantomData<T>);
impl<T: Config + Send + Sync> CheckSudo<T> {
pub fn new() -> Self {
Self(Default::default())
}
}
impl<T: Config + Send + Sync> sp_std::fmt::Debug for CheckSudo<T> {
#[cfg(feature = "std")]
fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {
write!(f, "CheckSudo")
}
#[cfg(not(feature = "std"))]
fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {
Ok(())
}
}
impl<T: Config + Send + Sync> SignedExtension for CheckSudo<T>
where
<T as frame_system::Config>::Call: Dispatchable<Info = DispatchInfo>,
{
type AccountId = T::AccountId;
type Call = <T as frame_system::Config>::Call;
type AdditionalSigned = ();
type Pre = ();
const IDENTIFIER: &'static str = "CheckSudo";
fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> {
Ok(())
}
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> Result<Self::Pre, TransactionValidityError> {
Ok(self.validate(who, call, info, len).map(|_| ())?)
}
fn validate(
&self,
who: &Self::AccountId,
_call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
_len: usize,
) -> TransactionValidity {
let root_account = match pallet_sudo::Pallet::<T>::key() {
Some(account) => account,
None => return Err(InvalidTransaction::BadSigner.into()),
};
if *who == root_account {
Ok(ValidTransaction {
priority: info.weight as TransactionPriority,
longevity: TransactionLongevity::max_value(),
propagate: true,
..Default::default()
})
} else {
Err(InvalidTransaction::BadSigner.into())
}
}
}
}
+1 -1
View File
@@ -98,7 +98,7 @@ impl pallet_balances::Config for Test {
impl cumulus_pallet_parachain_system::Config for Test { impl cumulus_pallet_parachain_system::Config for Test {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = (); type SelfParaId = ();
type OutboundXcmpMessageSource = XcmpQueue; type OutboundXcmpMessageSource = XcmpQueue;
type DmpMessageHandler = (); type DmpMessageHandler = ();
@@ -371,7 +371,7 @@ parameter_types! {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type DmpMessageHandler = DmpQueue; type DmpMessageHandler = DmpQueue;
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
@@ -258,7 +258,7 @@ parameter_types! {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type OutboundXcmpMessageSource = XcmpQueue; type OutboundXcmpMessageSource = XcmpQueue;
type DmpMessageHandler = DmpQueue; type DmpMessageHandler = DmpQueue;
@@ -32,6 +32,7 @@ pallet-balances = { git = "https://github.com/paritytech/substrate", default-fea
# Cumulus dependencies # Cumulus dependencies
cumulus-pallet-parachain-system = { path = "../../pallets/parachain-system", default-features = false } cumulus-pallet-parachain-system = { path = "../../pallets/parachain-system", default-features = false }
cumulus-pallet-solo-to-para = { path = "../../pallets/solo-to-para", default-features = false }
cumulus-primitives-core = { path = "../../primitives/core", default-features = false } cumulus-primitives-core = { path = "../../primitives/core", default-features = false }
[build-dependencies] [build-dependencies]
@@ -62,5 +63,6 @@ std = [
"pallet-balances/std", "pallet-balances/std",
"parachain-info/std", "parachain-info/std",
"cumulus-pallet-parachain-system/std", "cumulus-pallet-parachain-system/std",
"cumulus-pallet-solo-to-para/std",
"cumulus-primitives-core/std", "cumulus-primitives-core/std",
] ]
+10 -20
View File
@@ -38,7 +38,7 @@ use sp_version::RuntimeVersion;
// A few exports that help ease life for downstream crates. // A few exports that help ease life for downstream crates.
pub use frame_support::{ pub use frame_support::{
construct_runtime, match_type, parameter_types, construct_runtime, match_type, parameter_types,
traits::{Contains, IsInVec, Randomness}, traits::{IsInVec, Randomness},
weights::{ weights::{
constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},
DispatchClass, IdentityFee, Weight, DispatchClass, IdentityFee, Weight,
@@ -103,23 +103,6 @@ parameter_types! {
.build_or_panic(); .build_or_panic();
pub const SS58Prefix: u8 = 42; pub const SS58Prefix: u8 = 42;
} }
pub struct BaseFilter;
impl Contains<Call> for BaseFilter {
fn contains(c: &Call) -> bool {
// Disallow everything that is not set_validation_data or set_code
match c {
Call::ParachainSystem(cumulus_pallet_parachain_system::Call::set_validation_data {
..
}) => true,
Call::Sudo(pallet_sudo::Call::sudo_unchecked_weight { call: ref x, .. }) => {
matches!(x.as_ref(), &Call::System(frame_system::Call::set_code { .. }))
},
_ => false,
}
}
}
impl frame_system::Config for Runtime { impl frame_system::Config for Runtime {
/// The identifier used to distinguish between accounts. /// The identifier used to distinguish between accounts.
type AccountId = AccountId; type AccountId = AccountId;
@@ -151,7 +134,7 @@ impl frame_system::Config for Runtime {
type OnNewAccount = (); type OnNewAccount = ();
type OnKilledAccount = (); type OnKilledAccount = ();
type DbWeight = (); type DbWeight = ();
type BaseCallFilter = BaseFilter; type BaseCallFilter = frame_support::traits::Everything;
type SystemWeightInfo = (); type SystemWeightInfo = ();
type BlockWeights = RuntimeBlockWeights; type BlockWeights = RuntimeBlockWeights;
type BlockLength = RuntimeBlockLength; type BlockLength = RuntimeBlockLength;
@@ -165,9 +148,13 @@ impl pallet_sudo::Config for Runtime {
type Event = Event; type Event = Event;
} }
impl cumulus_pallet_solo_to_para::Config for Runtime {
type Event = Event;
}
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = cumulus_pallet_solo_to_para::Pallet<Runtime>;
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type OutboundXcmpMessageSource = (); type OutboundXcmpMessageSource = ();
type DmpMessageHandler = (); type DmpMessageHandler = ();
@@ -186,10 +173,12 @@ construct_runtime! {
{ {
System: frame_system::{Pallet, Call, Storage, Config, Event<T>}, System: frame_system::{Pallet, Call, Storage, Config, Event<T>},
Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>}, Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>},
ParachainSystem: cumulus_pallet_parachain_system::{ ParachainSystem: cumulus_pallet_parachain_system::{
Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned, Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned,
}, },
ParachainInfo: parachain_info::{Pallet, Storage, Config}, ParachainInfo: parachain_info::{Pallet, Storage, Config},
SoloToPara: cumulus_pallet_solo_to_para::{Pallet, Call, Storage, Event},
} }
} }
@@ -221,6 +210,7 @@ pub type SignedExtra = (
frame_system::CheckGenesis<Runtime>, frame_system::CheckGenesis<Runtime>,
frame_system::CheckEra<Runtime>, frame_system::CheckEra<Runtime>,
frame_system::CheckNonce<Runtime>, frame_system::CheckNonce<Runtime>,
cumulus_pallet_solo_to_para::CheckSudo<Runtime>,
); );
/// Unchecked extrinsic type as expected by this runtime. /// Unchecked extrinsic type as expected by this runtime.
pub type UncheckedExtrinsic = generic::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>; pub type UncheckedExtrinsic = generic::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;
+1 -1
View File
@@ -162,7 +162,7 @@ parameter_types! {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type OutboundXcmpMessageSource = (); type OutboundXcmpMessageSource = ();
type DmpMessageHandler = cumulus_pallet_xcm::UnlimitedDmpExecution<Runtime>; type DmpMessageHandler = cumulus_pallet_xcm::UnlimitedDmpExecution<Runtime>;
@@ -414,7 +414,7 @@ parameter_types! {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type DmpMessageHandler = DmpQueue; type DmpMessageHandler = DmpQueue;
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
@@ -426,7 +426,7 @@ parameter_types! {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type DmpMessageHandler = DmpQueue; type DmpMessageHandler = DmpQueue;
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
@@ -412,7 +412,7 @@ parameter_types! {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type SelfParaId = parachain_info::Pallet<Runtime>; type SelfParaId = parachain_info::Pallet<Runtime>;
type DmpMessageHandler = DmpQueue; type DmpMessageHandler = DmpQueue;
type ReservedDmpWeight = ReservedDmpWeight; type ReservedDmpWeight = ReservedDmpWeight;
-1
View File
@@ -18,7 +18,6 @@ polkadot-primitives = { git = "https://github.com/paritytech/polkadot", default-
polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" } polkadot-core-primitives = { git = "https://github.com/paritytech/polkadot", default-features = false, branch = "master" }
# Other dependencies # Other dependencies
impl-trait-for-tuples = "0.2.1"
codec = { package = "parity-scale-codec", version = "2.3.0", default-features = false, features = [ "derive" ] } codec = { package = "parity-scale-codec", version = "2.3.0", default-features = false, features = [ "derive" ] }
[features] [features]
-6
View File
@@ -139,12 +139,6 @@ pub enum ServiceQuality {
Fast, Fast,
} }
/// A trait which is called when the validation data is set.
#[impl_trait_for_tuples::impl_for_tuples(30)]
pub trait OnValidationData {
fn on_validation_data(data: &PersistedValidationData);
}
/// The parachain block that is created by a collator. /// The parachain block that is created by a collator.
/// ///
/// This is send as PoV (proof of validity block) to the relay-chain validators. There it will be /// This is send as PoV (proof of validity block) to the relay-chain validators. There it will be
+2 -2
View File
@@ -29,7 +29,7 @@ sudo=$8
binary="./target/release/polkadot-collator" binary="./target/release/polkadot-collator"
# build the chain spec we'll manipulate # build the chain spec we'll manipulate
$binary build-spec --chain seedling > seedling-spec-plain.json $binary build-spec --disable-default-bootnode --chain seedling > seedling-spec-plain.json
# convert runtime to hex # convert runtime to hex
cat $runtime_path | od -A n -v -t x1 | tr -d ' \n' > seedling-hex.txt cat $runtime_path | od -A n -v -t x1 | tr -d ' \n' > seedling-hex.txt
@@ -47,7 +47,7 @@ cat seedling-spec-plain.json | jq --rawfile code seedling-hex.txt '.genesis.runt
> edited-seedling-plain.json > edited-seedling-plain.json
# build a raw spec # build a raw spec
$binary build-spec --chain edited-seedling-plain.json --raw > seedling-spec-raw.json $binary build-spec --disable-default-bootnode --chain edited-seedling-plain.json --raw > seedling-spec-raw.json
# build genesis data # build genesis data
$binary export-genesis-state --parachain-id=$para_id --chain seedling-spec-raw.json > seedling-head-data $binary export-genesis-state --parachain-id=$para_id --chain seedling-spec-raw.json > seedling-head-data
+1 -1
View File
@@ -259,7 +259,7 @@ impl pallet_sudo::Config for Runtime {
impl cumulus_pallet_parachain_system::Config for Runtime { impl cumulus_pallet_parachain_system::Config for Runtime {
type SelfParaId = ParachainId; type SelfParaId = ParachainId;
type Event = Event; type Event = Event;
type OnValidationData = (); type OnSystemEvent = ();
type OutboundXcmpMessageSource = (); type OutboundXcmpMessageSource = ();
type DmpMessageHandler = (); type DmpMessageHandler = ();
type ReservedDmpWeight = (); type ReservedDmpWeight = ();