-
Notifications
You must be signed in to change notification settings - Fork 700
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[parachain-template] pallet configurations into mod configs
#3809
Merged
kianenigma
merged 17 commits into
paritytech:master
from
asiniscalchi:refactor/pallet_configs_into_single_module
Apr 1, 2024
Merged
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
2b3db77
all the pallets configs into mod configs
asiniscalchi 12a542f
Merge branch 'master' into refactor/pallet_configs_into_single_module
asiniscalchi 8c698a1
compiling
asiniscalchi 5e2529c
reorganize imports
asiniscalchi e3fac2a
reorganize imports
asiniscalchi 5769f22
fix compilation for all targets
asiniscalchi e97149e
import refactoring
asiniscalchi 399ef32
move xcm_config into configs/
asiniscalchi 9620905
Merge branch 'master' into refactor/pallet_configs_into_single_module
asiniscalchi c61a578
Merge branch 'master' into refactor/pallet_configs_into_single_module
asiniscalchi 9d0da6e
added license header
asiniscalchi acfcd8c
Merge branch 'master' into refactor/pallet_configs_into_single_module
asiniscalchi af6cfa6
new associated type
asiniscalchi bd8456f
Merge branch 'master' into refactor/pallet_configs_into_single_module
asiniscalchi 0027547
removed unused import
asiniscalchi be03bca
removed unused include
asiniscalchi b76d5e1
Merge branch 'master' into refactor/pallet_configs_into_single_module
kianenigma File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,311 @@ | ||
// This is free and unencumbered software released into the public domain. | ||
// | ||
// Anyone is free to copy, modify, publish, use, compile, sell, or | ||
// distribute this software, either in source code form or as a compiled | ||
// binary, for any purpose, commercial or non-commercial, and by any | ||
// means. | ||
// | ||
// In jurisdictions that recognize copyright laws, the author or authors | ||
// of this software dedicate any and all copyright interest in the | ||
// software to the public domain. We make this dedication for the benefit | ||
// of the public at large and to the detriment of our heirs and | ||
// successors. We intend this dedication to be an overt act of | ||
// relinquishment in perpetuity of all present and future rights to this | ||
// software under copyright law. | ||
// | ||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
// OTHER DEALINGS IN THE SOFTWARE. | ||
// | ||
// For more information, please refer to <http://unlicense.org> | ||
|
||
mod xcm_config; | ||
|
||
// Substrate and Polkadot dependencies | ||
use cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases; | ||
use cumulus_primitives_core::{AggregateMessageOrigin, ParaId}; | ||
use frame_support::{ | ||
derive_impl, | ||
dispatch::DispatchClass, | ||
parameter_types, | ||
traits::{ConstBool, ConstU32, ConstU64, ConstU8, EitherOfDiverse, TransformOrigin}, | ||
weights::{ConstantMultiplier, Weight}, | ||
PalletId, | ||
}; | ||
use frame_system::{ | ||
limits::{BlockLength, BlockWeights}, | ||
EnsureRoot, | ||
}; | ||
use pallet_xcm::{EnsureXcm, IsVoiceOfBody}; | ||
use parachains_common::message_queue::{NarrowOriginToSibling, ParaIdToSibling}; | ||
use polkadot_runtime_common::{ | ||
xcm_sender::NoPriceForMessageDelivery, BlockHashCount, SlowAdjustingFeeUpdate, | ||
}; | ||
use sp_consensus_aura::sr25519::AuthorityId as AuraId; | ||
use sp_runtime::Perbill; | ||
use sp_version::RuntimeVersion; | ||
use xcm::latest::prelude::BodyId; | ||
|
||
// Local module imports | ||
use super::{ | ||
weights::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight}, | ||
AccountId, Aura, Balance, Balances, Block, BlockNumber, CollatorSelection, Hash, MessageQueue, | ||
Nonce, PalletInfo, ParachainSystem, Runtime, RuntimeCall, RuntimeEvent, RuntimeFreezeReason, | ||
RuntimeHoldReason, RuntimeOrigin, RuntimeTask, Session, SessionKeys, System, WeightToFee, | ||
XcmpQueue, AVERAGE_ON_INITIALIZE_RATIO, BLOCK_PROCESSING_VELOCITY, EXISTENTIAL_DEPOSIT, HOURS, | ||
MAXIMUM_BLOCK_WEIGHT, MICROUNIT, NORMAL_DISPATCH_RATIO, RELAY_CHAIN_SLOT_DURATION_MILLIS, | ||
SLOT_DURATION, UNINCLUDED_SEGMENT_CAPACITY, VERSION, | ||
}; | ||
use xcm_config::{RelayLocation, XcmOriginToTransactDispatchOrigin}; | ||
|
||
parameter_types! { | ||
pub const Version: RuntimeVersion = VERSION; | ||
|
||
// This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. | ||
// The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the | ||
// `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize | ||
// the lazy contract deletion. | ||
pub RuntimeBlockLength: BlockLength = | ||
BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); | ||
pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() | ||
.base_block(BlockExecutionWeight::get()) | ||
.for_class(DispatchClass::all(), |weights| { | ||
weights.base_extrinsic = ExtrinsicBaseWeight::get(); | ||
}) | ||
.for_class(DispatchClass::Normal, |weights| { | ||
weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); | ||
}) | ||
.for_class(DispatchClass::Operational, |weights| { | ||
weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); | ||
// Operational transactions have some extra reserved space, so that they | ||
// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. | ||
weights.reserved = Some( | ||
MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT | ||
); | ||
}) | ||
.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) | ||
.build_or_panic(); | ||
pub const SS58Prefix: u16 = 42; | ||
} | ||
|
||
/// The default types are being injected by [`derive_impl`](`frame_support::derive_impl`) from | ||
/// [`ParaChainDefaultConfig`](`struct@frame_system::config_preludes::ParaChainDefaultConfig`), | ||
/// but overridden as needed. | ||
#[derive_impl(frame_system::config_preludes::ParaChainDefaultConfig)] | ||
impl frame_system::Config for Runtime { | ||
/// The identifier used to distinguish between accounts. | ||
type AccountId = AccountId; | ||
/// The index type for storing how many extrinsics an account has signed. | ||
type Nonce = Nonce; | ||
/// The type for hashing blocks and tries. | ||
type Hash = Hash; | ||
/// The block type. | ||
type Block = Block; | ||
/// Maximum number of block number to block hash mappings to keep (oldest pruned first). | ||
type BlockHashCount = BlockHashCount; | ||
/// Runtime version. | ||
type Version = Version; | ||
/// The data to be stored in an account. | ||
type AccountData = pallet_balances::AccountData<Balance>; | ||
/// The weight of database operations that the runtime can invoke. | ||
type DbWeight = RocksDbWeight; | ||
/// Block & extrinsics weights: base values and limits. | ||
type BlockWeights = RuntimeBlockWeights; | ||
/// The maximum length of a block (in bytes). | ||
type BlockLength = RuntimeBlockLength; | ||
/// This is used as an identifier of the chain. 42 is the generic substrate prefix. | ||
type SS58Prefix = SS58Prefix; | ||
/// The action to take on a Runtime Upgrade | ||
type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>; | ||
type MaxConsumers = frame_support::traits::ConstU32<16>; | ||
} | ||
|
||
impl pallet_timestamp::Config for Runtime { | ||
/// A timestamp: milliseconds since the unix epoch. | ||
type Moment = u64; | ||
type OnTimestampSet = Aura; | ||
type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; | ||
type WeightInfo = (); | ||
} | ||
|
||
impl pallet_authorship::Config for Runtime { | ||
type FindAuthor = pallet_session::FindAccountFromAuthorIndex<Self, Aura>; | ||
type EventHandler = (CollatorSelection,); | ||
} | ||
|
||
parameter_types! { | ||
pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; | ||
} | ||
|
||
impl pallet_balances::Config for Runtime { | ||
type MaxLocks = ConstU32<50>; | ||
/// The type for recording an account's balance. | ||
type Balance = Balance; | ||
/// The ubiquitous event type. | ||
type RuntimeEvent = RuntimeEvent; | ||
type DustRemoval = (); | ||
type ExistentialDeposit = ExistentialDeposit; | ||
type AccountStore = System; | ||
type WeightInfo = pallet_balances::weights::SubstrateWeight<Runtime>; | ||
type MaxReserves = ConstU32<50>; | ||
type ReserveIdentifier = [u8; 8]; | ||
type RuntimeHoldReason = RuntimeHoldReason; | ||
type RuntimeFreezeReason = RuntimeFreezeReason; | ||
type FreezeIdentifier = (); | ||
type MaxFreezes = ConstU32<0>; | ||
} | ||
|
||
parameter_types! { | ||
/// Relay Chain `TransactionByteFee` / 10 | ||
pub const TransactionByteFee: Balance = 10 * MICROUNIT; | ||
} | ||
|
||
impl pallet_transaction_payment::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, ()>; | ||
type WeightToFee = WeightToFee; | ||
type LengthToFee = ConstantMultiplier<Balance, TransactionByteFee>; | ||
type FeeMultiplierUpdate = SlowAdjustingFeeUpdate<Self>; | ||
type OperationalFeeMultiplier = ConstU8<5>; | ||
} | ||
|
||
impl pallet_sudo::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type RuntimeCall = RuntimeCall; | ||
type WeightInfo = (); | ||
} | ||
|
||
parameter_types! { | ||
pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); | ||
pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); | ||
pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; | ||
} | ||
|
||
impl cumulus_pallet_parachain_system::Config for Runtime { | ||
type WeightInfo = (); | ||
type RuntimeEvent = RuntimeEvent; | ||
type OnSystemEvent = (); | ||
type SelfParaId = parachain_info::Pallet<Runtime>; | ||
type OutboundXcmpMessageSource = XcmpQueue; | ||
type DmpQueue = frame_support::traits::EnqueueWithOrigin<MessageQueue, RelayOrigin>; | ||
type ReservedDmpWeight = ReservedDmpWeight; | ||
type XcmpMessageHandler = XcmpQueue; | ||
type ReservedXcmpWeight = ReservedXcmpWeight; | ||
type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; | ||
type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook< | ||
Runtime, | ||
RELAY_CHAIN_SLOT_DURATION_MILLIS, | ||
BLOCK_PROCESSING_VELOCITY, | ||
UNINCLUDED_SEGMENT_CAPACITY, | ||
>; | ||
} | ||
|
||
impl parachain_info::Config for Runtime {} | ||
|
||
parameter_types! { | ||
pub MessageQueueServiceWeight: Weight = Perbill::from_percent(35) * RuntimeBlockWeights::get().max_block; | ||
} | ||
|
||
impl pallet_message_queue::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type WeightInfo = (); | ||
#[cfg(feature = "runtime-benchmarks")] | ||
type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< | ||
cumulus_primitives_core::AggregateMessageOrigin, | ||
>; | ||
#[cfg(not(feature = "runtime-benchmarks"))] | ||
type MessageProcessor = xcm_builder::ProcessXcmMessage< | ||
AggregateMessageOrigin, | ||
xcm_executor::XcmExecutor<xcm_config::XcmConfig>, | ||
RuntimeCall, | ||
>; | ||
type Size = u32; | ||
// The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: | ||
type QueueChangeHandler = NarrowOriginToSibling<XcmpQueue>; | ||
type QueuePausedQuery = NarrowOriginToSibling<XcmpQueue>; | ||
type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; | ||
type MaxStale = sp_core::ConstU32<8>; | ||
type ServiceWeight = MessageQueueServiceWeight; | ||
type IdleMaxServiceWeight = (); | ||
} | ||
|
||
impl cumulus_pallet_aura_ext::Config for Runtime {} | ||
|
||
impl cumulus_pallet_xcmp_queue::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type ChannelInfo = ParachainSystem; | ||
type VersionWrapper = (); | ||
// Enqueue XCMP messages from siblings for later processing. | ||
type XcmpQueue = TransformOrigin<MessageQueue, AggregateMessageOrigin, ParaId, ParaIdToSibling>; | ||
type MaxInboundSuspended = sp_core::ConstU32<1_000>; | ||
type ControllerOrigin = EnsureRoot<AccountId>; | ||
type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; | ||
type WeightInfo = (); | ||
type PriceForSiblingDelivery = NoPriceForMessageDelivery<ParaId>; | ||
} | ||
|
||
parameter_types! { | ||
pub const Period: u32 = 6 * HOURS; | ||
pub const Offset: u32 = 0; | ||
} | ||
|
||
impl pallet_session::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type ValidatorId = <Self as frame_system::Config>::AccountId; | ||
// we don't have stash and controller, thus we don't need the convert as well. | ||
type ValidatorIdOf = pallet_collator_selection::IdentityCollator; | ||
type ShouldEndSession = pallet_session::PeriodicSessions<Period, Offset>; | ||
type NextSessionRotation = pallet_session::PeriodicSessions<Period, Offset>; | ||
type SessionManager = CollatorSelection; | ||
// Essentially just Aura, but let's be pedantic. | ||
type SessionHandler = <SessionKeys as sp_runtime::traits::OpaqueKeys>::KeyTypeIdProviders; | ||
type Keys = SessionKeys; | ||
type WeightInfo = (); | ||
} | ||
|
||
impl pallet_aura::Config for Runtime { | ||
type AuthorityId = AuraId; | ||
type DisabledValidators = (); | ||
type MaxAuthorities = ConstU32<100_000>; | ||
type AllowMultipleBlocksPerSlot = ConstBool<false>; | ||
type SlotDuration = pallet_aura::MinimumPeriodTimesTwo<Self>; | ||
} | ||
|
||
parameter_types! { | ||
pub const PotId: PalletId = PalletId(*b"PotStake"); | ||
pub const SessionLength: BlockNumber = 6 * HOURS; | ||
// StakingAdmin pluralistic body. | ||
pub const StakingAdminBodyId: BodyId = BodyId::Defense; | ||
} | ||
|
||
/// We allow root and the StakingAdmin to execute privileged collator selection operations. | ||
pub type CollatorSelectionUpdateOrigin = EitherOfDiverse< | ||
EnsureRoot<AccountId>, | ||
EnsureXcm<IsVoiceOfBody<RelayLocation, StakingAdminBodyId>>, | ||
>; | ||
|
||
impl pallet_collator_selection::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type Currency = Balances; | ||
type UpdateOrigin = CollatorSelectionUpdateOrigin; | ||
type PotId = PotId; | ||
type MaxCandidates = ConstU32<100>; | ||
type MinEligibleCollators = ConstU32<4>; | ||
type MaxInvulnerables = ConstU32<20>; | ||
// should be a multiple of session or things will get inconsistent | ||
type KickThreshold = Period; | ||
type ValidatorId = <Self as frame_system::Config>::AccountId; | ||
type ValidatorIdOf = pallet_collator_selection::IdentityCollator; | ||
type ValidatorRegistration = Session; | ||
type WeightInfo = (); | ||
} | ||
|
||
/// Configure the pallet template in pallets/template. | ||
impl pallet_parachain_template::Config for Runtime { | ||
type RuntimeEvent = RuntimeEvent; | ||
type WeightInfo = pallet_parachain_template::weights::SubstrateWeight<Runtime>; | ||
} |
2 changes: 1 addition & 1 deletion
2
...lates/parachain/runtime/src/xcm_config.rs → ...rachain/runtime/src/configs/xcm_config.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are all the ones that are mentioned here actually overwriting something?
type Hash
,type BlockWeight
etc should be the same inParachainDefaultConfig