:source-highlighter: highlight.js
:highlightjs-languages: rust
:github-icon: pass:[<svg class="icon"><use href="#github-icon"/></svg>]

= cumulus_pallet_aura_ext

Branch/Release: `release-polkadot-v1.10.0`

== Purpose

This pallet integrates parachain’s own block production mechanism (for example AuRa) into Cumulus parachain system. It allows:

- to manage the unincluded blocks from the current slot
- to validate produced block against the relay chain

== Configuration and Integration link:https://github.com/paritytech/polkadot-sdk/tree/release-polkadot-v1.10.0/cumulus/pallets/aura-ext[{github-icon},role=heading-link]

There is no special config for this integration and it has no dispatchables, but you need to integrate it with other `parachain-system` crate:

=== Integrate `BlockExecutor`

When you invoke the `register_validate_block` macro, you should provide `cumulus_pallet_aura_ext::BlockExecutor` to it to allow `aura-ext` to validate the blocks produced by `aura`

[source, rust]
----
cumulus_pallet_parachain_system::register_validate_block! {
    Runtime = Runtime,
    BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,
}
----

=== Integrate `ConsensusHook`

Also you might want to manage the consensus externally and control the segment that is not yet included (its capacity, speed and etc.) `aura-ext` provides the `FixedVelocityConsensusHook` that allows to check if we are still in the limits for the slot.

[source, rust]
----
impl cumulus_pallet_parachain_system::Config for Runtime {
    ...
    type ConsensusHook = cumulus_pallet_aura_ext::FixedVelocityConsensusHook<
        Runtime,
        RELAY_CHAIN_SLOT_DURATION_MILLIS,
        BLOCK_PROCESSING_VELOCITY,
        UNINCLUDED_SEGMENT_CAPACITY,
    >;
}
----
