31 releases (17 major breaking)
19.0.0 | Sep 26, 2024 |
---|---|
18.0.0 | Jul 18, 2024 |
17.0.0 | Jul 12, 2024 |
16.0.0 | Jun 24, 2024 |
0.0.0 |
|
#1 in #collator
108,354 downloads per month
Used in 44 crates
(23 directly)
2.5MB
45K
SLoC
License: Apache-2.0
Release
Polkadot SDK stable2409
lib.rs
:
Collator Selection pallet.
A pallet to manage collators in a parachain.
Overview
The Collator Selection pallet manages the collators of a parachain. Collation is not a secure activity and this pallet does not implement any game-theoretic mechanisms to meet BFT safety assumptions of the chosen set.
Terminology
- Collator: A parachain block producer.
- Bond: An amount of
Balance
reserved for candidate registration. - Invulnerable: An account guaranteed to be in the collator set.
Implementation
The final Collators
are aggregated from two individual lists:
Invulnerables
: a set of collators appointed by governance. These accounts will always be collators.CandidateList
: these are candidates to the collation task and may or may not be elected as a final collator.
The current implementation resolves congestion of CandidateList
through a simple auction
mechanism. Candidates bid for the collator slots and at the end of the session, the auction ends
and the top candidates are selected to become collators. The number of selected candidates is
determined by the value of DesiredCandidates
.
Before the list reaches full capacity, candidates can register by placing the minimum bond
through register_as_candidate
. Then, if an account wants to participate in the collator slot
auction, they have to replace an existing candidate by placing a greater deposit through
take_candidate_slot
. Existing candidates can increase their bids through update_bond
.
At any point, an account can take the place of another account in the candidate list if they put up a greater deposit than the target. While new joiners would like to deposit as little as possible to participate in the auction, the replacement threat incentivizes candidates to bid as close to their budget as possible in order to avoid being replaced.
Candidates which are not on "winning" slots in the list can also decrease their deposits through
update_bond
, but candidates who are on top slots and try to decrease their deposits will fail
in order to enforce auction mechanics and have meaningful bids.
Candidates will not be allowed to get kicked or leave_intent
if the total number of collators
would fall below MinEligibleCollators
. This is to ensure that some collators will always
exist, i.e. someone is eligible to produce a block.
When a new session starts, candidates with the highest deposits will be selected in order until the desired number of collators is reached. Candidates can increase or decrease their deposits between sessions in order to ensure they receive a slot in the collator list.
Rewards
The Collator Selection pallet maintains an on-chain account (the "Pot"). In each block, the collator who authored it receives:
- Half the value of the Pot.
- Half the value of the transaction fees within the block. The other half of the transaction fees are deposited into the Pot.
To initiate rewards, an ED needs to be transferred to the pot address.
Note: Eventually the Pot distribution may be modified as discussed in this issue.
Dependencies
~18–33MB
~552K SLoC