Select collators
Please read Substrate to Polkadot SDK page first.
This guide is useful for teams getting ready for their parachain launch in production, exploring the different options in collator selection.
It is important for a parachain networks' collators are set to ensure that there exist some neutral collators to prevent censorship — but not necessarily a majority. It is also important to avoid having too many collators as they may slow down the network. This guide steps through the considerations to take into account when designing a parachain network.
Collator selection
You are free to choose your method of collator selection. Common methods include stake voting or directly assigning collators via committee or other origins such as democracy. In both cases, create a pallet to implement the logic that best fits your needs.
Stake voting
The Cumulus collator-selection
pallet is a practical example on implementing stake voting to select collators.
Using on-chain governance
Implement a special origin that allows members of that origin to become a collator. Use the democracy pallet to elect these members and define them in your pallet dedicated to handling collator selection:
/// Configuration trait of this pallet.
#[pallet::config]
pub trait Config: frame_system::Config {
// --snip-- //
type MySpecialOrigin: EnsureOrigin<Self::RuntimeOrigin>;
}
// --snip-- //
#[pallet::call]
impl<T: Config> Pallet<T> {
/// Some set-collator dispatchable.
#[pallet::weight(some_weight)]
pub fn set_collator( origin: OriginFor<T>) -> DispatchResultWithPostInfo {
T::MySpecialOrigin::ensure_origin(origin)?;
// --snip-- //
}
There are also different ways to implement incentives for collators. Take a look at this example to explore how.
Examples
- Cumulus implementation of collator selection with incentives using transaction fees.
- Moonbeam implementation of collator selection using an inflationary monetary policy staking scheme.