Skip to content


A parachain is a blockchain that is validated by the Polkadot relay chain. This validation takes place in the form of block re-execution by the relay chain validators to confirm the correctness of the parachain's state transitions. This validation enables not only enables relay-chain to parachain communication, but also enables parachains to communicate with each other. In this architecture the relay chain is responsible for the finality of all parachains, and can serve as the "consensus client" for any parachain connected to it.

Parachain blocks which have been validated by the relay chain can be considered as finalized. This finality is complete when the associated headers for these blocks have made their way in to the relay chain state. This allows any parachain to obtain state proofs from the relay chain of it's sibling parachain headers which have been finalized. This is the basis for the ParachainConsensusClient.

The storage key on the relay chain for parachain headers is given by the following:

twox_128("Paras")+twox_128("Heads")+twox_64(scale_encoded_para_id)\text{twox\_128("Paras")} + \text{twox\_128("Heads")} + \text{twox\_64(scale\_encoded\_para\_id)}

This key points to the latest scale-encoded finalized header of the parachain with the given para_id. To verify this proof, parachains would need to be aware of the latest relay chain state root. This is provided by the cumulus-parachain-system module in the form of the PersistedValidationData inherent.