Crate cumulus_client_pov_recovery

source ·
Expand description

Parachain PoV recovery

A parachain needs to build PoVs that are send to the relay chain to progress. These PoVs are erasure encoded and one piece of it is stored by each relay chain validator. As the relay chain decides on which PoV per parachain to include and thus, to progress the parachain it can happen that the block corresponding to this PoV isn’t propagated in the parachain network. This can have several reasons, either a malicious collator that managed to include its own PoV and doesn’t want to share it with the rest of the network or maybe a collator went down before it could distribute the block in the network. When something like this happens we can use the PoV recovery algorithm implemented in this crate to recover a PoV and to propagate it with the rest of the network.

It works in the following way:

  1. For every included relay chain block we note the backed candidate of our parachain. If the block belonging to the PoV is already known, we do nothing. Otherwise we start a timer that waits for a randomized time inside a specified interval before starting to recover the PoV.

  2. If between starting and firing the timer the block is imported, we skip the recovery of the PoV.

  3. If the timer fired we recover the PoV using the relay chain PoV recovery protocol.

4a. After it is recovered, we restore the block and import it.

4b. Since we are trying to recover pending candidates, availability is not guaranteed. If the block PoV is not yet available, we retry.

If we need to recover multiple PoV blocks (which should hopefully not happen in real life), we make sure that the blocks are imported in the correct order.

Structs§

  • Encapsulates the logic of the pov recovery.
  • The delay between observing an unknown block and triggering the recovery of a block. Randomizing the start of the recovery within this interval can be used to prevent self-DOSing if the recovery request is part of a distributed protocol and there is the possibility that multiple actors are requiring to perform the recovery action at approximately the same time.
  • Structure used to trigger an explicit recovery request via PoVRecovery.

Enums§

Traits§

  • Test-friendly wrapper trait for the overseer handle. Can be used to simulate failing recovery requests.