4666047395
Updated 4763 files with dual copyright: - Parity Technologies (UK) Ltd. - Dijital Kurdistan Tech Institute
55 lines
2.4 KiB
Rust
55 lines
2.4 KiB
Rust
// Copyright (C) Parity Technologies (UK) Ltd. and Dijital Kurdistan Tech Institute
|
|
// This file is part of Pezcumulus.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
//! Core primitives for Aura in Pezcumulus.
|
|
//!
|
|
//! In particular, this exposes the [`AuraUnincludedSegmentApi`] which is used to regulate
|
|
//! the behavior of Aura within a teyrchain context.
|
|
|
|
#![cfg_attr(not(feature = "std"), no_std)]
|
|
|
|
pub use pezsp_consensus_aura::Slot;
|
|
|
|
pezsp_api::decl_runtime_apis! {
|
|
/// This runtime API is used to inform potential block authors whether they will
|
|
/// have the right to author at a slot, assuming they have claimed the slot.
|
|
///
|
|
/// In particular, this API allows Aura-based teyrchains to regulate their "unincluded segment",
|
|
/// which is the section of the head of the chain which has not yet been made available in the
|
|
/// relay chain.
|
|
///
|
|
/// When the unincluded segment is short, Aura chains will allow authors to create multiple
|
|
/// blocks per slot in order to build a backlog. When it is saturated, this API will limit
|
|
/// the amount of blocks that can be created.
|
|
///
|
|
/// Changes:
|
|
/// - Version 2: Update to `can_build_upon` to take a relay chain `Slot` instead of a teyrchain `Slot`.
|
|
#[api_version(2)]
|
|
pub trait AuraUnincludedSegmentApi {
|
|
/// Whether it is legal to extend the chain, assuming the given block is the most
|
|
/// recently included one as-of the relay parent that will be built against, and
|
|
/// the given relay chain slot.
|
|
///
|
|
/// This should be consistent with the logic the runtime uses when validating blocks to
|
|
/// avoid issues.
|
|
///
|
|
/// When the unincluded segment is empty, i.e. `included_hash == at`, where at is the block
|
|
/// whose state we are querying against, this must always return `true` as long as the slot
|
|
/// is more recent than the included block itself.
|
|
fn can_build_upon(included_hash: Block::Hash, slot: Slot) -> bool;
|
|
}
|
|
}
|