This repository has been archived by the owner on Nov 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
3 changed files
with
47 additions
and
17 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
44 changes: 28 additions & 16 deletions
44
roadmap/implementors-guide/src/node/utility/provisioner.md
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 |
---|---|---|
@@ -1,30 +1,42 @@ | ||
# Provisioner | ||
|
||
This subsystem is responsible for providing data to an external block authorship service beyond the scope of the [Overseer](/node/overseer.html) so that the block authorship service can author blocks containing data produced by various subsystems. | ||
Relay chain block authorship authority is governed by BABE and is beyond the scope of the Overseer and the rest of the subsystems. That said, ultimately the block author needs to select a set of backable parachain candidates and other consensus data, and assemble a block from them. This subsystem is responsible for providing the necessary data to all potential block authors. | ||
|
||
In particular, the data to provide: | ||
A major feature of the provisioner: this subsystem is responsible for ensuring that parachain block candidates are sufficiently available before sending them to potential block authors. | ||
|
||
- backable candidates and their backings | ||
- signed bitfields | ||
- misbehavior reports | ||
- dispute inherent | ||
> TODO: needs fleshing out in validity module, related to blacklisting | ||
## Provisionable Data | ||
|
||
## Protocol | ||
### Backable Candidates | ||
|
||
The block author can choose 0 or 1 backable parachain candidates per parachain; the only constraint is that each backable candidate has the appropriate relay parent. However, the choice of a backable candidate must be the block author's; the provisioner must ensure that block authors are aware of all available backable candidates. | ||
|
||
> TODO: "and their backings": why? | ||
### Signed Bitfields | ||
|
||
Signed bitfields are attestations from a particular validator about which candidates it believes are available. | ||
|
||
> TODO: Are these actually included in the relay chain block, or just used to help decide whether a block is available and therefore a backable candidate? | ||
### Misbehavior Reports | ||
|
||
Input: | ||
Misbehavior reports contain proof that a validator or set of validators has misbehaved; they consist of a proof of some kind of misbehavior: double-voting, being the minority vote in a disputed block's vote, etc. These cause dots to be slashed and must be included in the block. | ||
|
||
- Bitfield(relay_parent, signed_bitfield) | ||
- BackableCandidate(relay_parent, candidate_receipt, backing) | ||
- RequestBlockAuthorshipData(relay_parent, response_channel) | ||
> TODO: This problem is mentioned elsewhere, but how do we force the block author to include a misbehavior report if they don't like its effects, i.e. they are among the nodes which get slashed? | ||
### Dispute Inherent | ||
|
||
> TODO: Is this different from a misbehavior report? How? | ||
## Protocol | ||
|
||
Input: [`ProvisionerMessage`](/type-definitions.html#provisioner-message) | ||
|
||
## Functionality | ||
|
||
Use `StartWork` and `StopWork` to manage a set of jobs for relay-parents we might be building upon. | ||
Forward all messages to corresponding job, if any. | ||
Forward all messages to corresponding job. | ||
|
||
## Block Authorship Provisioning Job | ||
|
||
Track all signed bitfields, all backable candidates received. Provide them to the `RequestBlockAuthorshipData` requester via the `response_channel`. If more than one backable candidate exists for a given `Para`, provide the first one received. | ||
|
||
> TODO: better candidate-choice rules. | ||
Track all signed bitfields, all backable candidates received. Provide them to the `RequestBlockAuthorshipData` requester via the `response_channel`. |
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