mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-10 14:37:31 +00:00
a30092ab42
* Add markdown linting - add linter default rules - adapt rules to current code - fix the code for linting to pass - add CI check fix #1243 * Fix markdown for Substrate * Fix tooling install * Fix workflow * Add documentation * Remove trailing spaces * Update .github/.markdownlint.yaml Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix mangled markdown/lists * Fix captalization issues on known words
38 lines
1.7 KiB
Markdown
38 lines
1.7 KiB
Markdown
# Bitfield Signing
|
|
|
|
Validators vote on the availability of a backed candidate by issuing signed bitfields, where each bit corresponds to a
|
|
single candidate. These bitfields can be used to compactly determine which backed candidates are available or not based
|
|
on a 2/3+ quorum.
|
|
|
|
## Protocol
|
|
|
|
Input:
|
|
|
|
There is no dedicated input mechanism for bitfield signing. Instead, Bitfield Signing produces a bitfield representing
|
|
the current state of availability on `StartWork`.
|
|
|
|
Output:
|
|
|
|
- `BitfieldDistribution::DistributeBitfield`: distribute a locally signed bitfield
|
|
- `AvailabilityStore::QueryChunk(CandidateHash, validator_index, response_channel)`
|
|
|
|
## Functionality
|
|
|
|
Upon receipt of an `ActiveLeavesUpdate`, launch bitfield signing job for each `activated` head referring to a fresh
|
|
leaf. Stop the job for each `deactivated` head.
|
|
|
|
## Bitfield Signing Job
|
|
|
|
Localized to a specific relay-parent `r` If not running as a validator, do nothing.
|
|
|
|
- For each fresh leaf, begin by waiting a fixed period of time so availability distribution has the chance to make
|
|
candidates available.
|
|
- Determine our validator index `i`, the set of backed candidates pending availability in `r`, and which bit of the
|
|
bitfield each corresponds to.
|
|
- Start with an empty bitfield. For each bit in the bitfield, if there is a candidate pending availability, query the
|
|
[Availability Store](../utility/availability-store.md) for whether we have the availability chunk for our validator
|
|
index. The `OccupiedCore` struct contains the candidate hash so the full candidate does not need to be fetched from
|
|
runtime.
|
|
- For all chunks we have, set the corresponding bit in the bitfield.
|
|
- Sign the bitfield and dispatch a `BitfieldDistribution::DistributeBitfield` message.
|