forked from paritytech/polkadot-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[parachain-template] pallet configurations into
mod configs
(parity…
…tech#3809) This PR introduces a refactor of the parachain runtime configuration by consolidating all pallet configurations into a new module named `configs`. This change aims to improve the readability and maintainability of the runtime configuration by centralizing all configuration parameters. ## Changes - **Creation of `configs.rs`**: A new file `configs.rs` has been added under `templates/parachain/runtime/src/`, containing all the runtime configurations previously scattered across `lib.rs`. - **Refactoring of `lib.rs`**: The `lib.rs` file has been significantly slimmed down by removing the inline pallet configurations and importing them from `configs.rs` instead. - **Optimization of Import Statements**: Reorganized import statements to clarify the runtime's dependency structure. ### Benefits - **Improved Readability**: With configurations being centralized, developers can now easily locate and review runtime parameters without navigating through the `lib.rs` file. This refactor does not introduce any changes to the runtime logic but improves the project structure for better development experience. --------- Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
- Loading branch information
Showing
4 changed files
with
317 additions
and
274 deletions.
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.