Files
pezkuwi-subxt/polkadot/roadmap/implementers-guide/src/runtime/inclusioninherent.md
T
Sergei Shulepov 5d4ddeee7a Implementer's Guide: Router fixes (#1727)
* Guide: Reindent the router module with 4 spaces

The guide used to use 2 spaces for indentation. The problem with that is `mdbook` doesn't recognize them as a proper indentation and thus doesn't render indent properly.

A couple of things are not indented here because they will be changed in the following commits

* Guide: a bunch of fixes
2020-09-16 17:52:42 +02:00

2.2 KiB

InclusionInherent

This module is responsible for all the logic carried by the Inclusion entry-point. This entry-point is mandatory, in that it must be invoked exactly once within every block, and it is also "inherent", in that it is provided with no origin by the block author. The data within it carries its own authentication. If any of the steps within fails, the entry-point is considered as having failed and the block will be invalid.

This module does not have the same initialization/finalization concerns as the others, as it only requires that entry points be triggered after all modules have initialized and that finalization happens after entry points are triggered. Both of these are assumptions we have already made about the runtime's order of operations, so this module doesn't need to be initialized or finalized by the Initializer.

Storage

Included: Option<()>,

Finalization

  1. Take (get and clear) the value of Included. If it is not Some, throw an unrecoverable error.

Entry Points

  • inclusion: This entry-point accepts two parameters: Bitfields and BackedCandidates.
    1. The Bitfields are first forwarded to the Inclusion::process_bitfields routine, returning a set of freed cores. Provide a Scheduler::core_para as a core-lookup to the process_bitfields routine. Annotate each of these freed cores with FreedReason::Concluded.
    2. If Scheduler::availability_timeout_predicate is Some, invoke Inclusion::collect_pending using it, and add timed-out cores to the free cores, annotated with FreedReason::TimedOut.
    3. Invoke Scheduler::schedule(freed)
    4. Invoke the Inclusion::process_candidates routine with the parameters (backed_candidates, Scheduler::scheduled(), Scheduler::group_validators).
    5. Call Scheduler::occupied using the return value of the Inclusion::process_candidates call above, first sorting the list of assigned core indices.
    6. Call the Router::process_pending_upward_dispatchables routine to execute all messages in upward dispatch queues.
    7. If all of the above succeeds, set Included to Some(()).