Files
pezkuwi-subxt/polkadot/roadmap/implementers-guide/src/runtime/inclusioninherent.md
T
Sergei Shulepov c69e5766db Breakdown the Router module on Dmp, Ump, Hrmp modules (#1939)
* Guide: Split router module in guide.

Now we have: DMP, UMP and Router module.

* Add a glossary entry for what used to be called Router

* Extract DMP

* Extract UMP

* Extract HRMP

* Switch over to new modules

* Router: goodbye sweet prince

* Link to messaging overview for details.

* Update missed rococo and test runtimes.

* Commit destroyed by rebase changes

* Don't deprecate Router but rather make it a meta-project

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* Fix typos suggestion

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* Fix repetition in the impl guide

* Clarify that processed_downward_messages has the u32 type

* Remove the router subdir.

* Deabbreviate DMP,UMP,HRMP

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2020-11-16 14:02:01 +00: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 Ump::process_pending_upward_messages routine to execute all messages in upward dispatch queues.
    7. If all of the above succeeds, set Included to Some(()).