Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
rework as associated type
Browse files Browse the repository at this point in the history
  • Loading branch information
rphmeier committed Jun 8, 2023
1 parent dc3ff77 commit e595b23
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 20 deletions.
32 changes: 15 additions & 17 deletions frame/aura/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,20 @@ pub mod pallet {
/// Blocks authored by a disabled validator will lead to a panic as part of this module's
/// initialization.
type DisabledValidators: DisabledValidators;

/// Whether to allow block authors to create multiple blocks per slot.
///
/// If this is `true`, the pallet will allow slots to stay the same across sequential blocks.
/// If this is `false`, the pallet will require that subsequent blocks always have higher slots
/// than previous ones.
///
/// Regardless of the setting of this storage value, the pallet will always enforce the
/// invariant that slots don't move backwards as the chain progresses.
///
/// The typical value for this should be 'false' unless this pallet is being augmented by
/// another pallet which enforces some limitation on the number of blocks authors can create
/// using the same slot.
type AllowMultipleBlocksPerSlot: Get<bool>;
}

#[pallet::pallet]
Expand All @@ -92,7 +106,7 @@ pub mod pallet {
if let Some(new_slot) = Self::current_slot_from_digests() {
let current_slot = CurrentSlot::<T>::get();

if AllowMultipleBlocksPerSlot::<T>::get() {
if T::AllowMultipleBlocksPerSlot::get() {
assert!(current_slot <= new_slot, "Slot must not decrease");
} else {
assert!(current_slot < new_slot, "Slot must increase");
Expand Down Expand Up @@ -133,22 +147,6 @@ pub mod pallet {
#[pallet::getter(fn current_slot)]
pub(super) type CurrentSlot<T: Config> = StorageValue<_, Slot, ValueQuery>;

/// Whether to allow authors to create multiple blocks per slot.
///
/// If this is `true`, the pallet will allow slots to stay the same across sequential blocks.
/// If this is `false`, the pallet will require that subsequent blocks always have higher slots
/// than previous ones.
///
/// Regardless of the setting of this storage value, the pallet will always enforce the
/// invariant that slots don't move backwards as the chain progresses.
///
/// The typical value for this should be 'false' unless this pallet is being augmented by
/// another pallet which enforces some limitation on the number of blocks authors can create
/// using the same slot.
#[pallet::storage]
#[pallet::getter(fn allow_multiple_blocks)]
pub(super) type AllowMultipleBlocksPerSlot<T: Config> = StorageValue<_, bool, ValueQuery>;

#[pallet::genesis_config]
#[derive(frame_support::DefaultNoBound)]
pub struct GenesisConfig<T: Config> {
Expand Down
2 changes: 2 additions & 0 deletions frame/aura/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ impl pallet_timestamp::Config for Test {

parameter_types! {
static DisabledValidatorTestValue: Vec<AuthorityIndex> = Default::default();
pub static AllowMultipleBlocksPerSlot: bool = false;
}

pub struct MockDisabledValidators;
Expand All @@ -106,6 +107,7 @@ impl pallet_aura::Config for Test {
type AuthorityId = AuthorityId;
type DisabledValidators = MockDisabledValidators;
type MaxAuthorities = ConstU32<10>;
type AllowMultipleBlocksPerSlot = AllowMultipleBlocksPerSlot;
}

pub fn new_test_ext(authorities: Vec<u64>) -> sp_io::TestExternalities {
Expand Down
8 changes: 5 additions & 3 deletions frame/aura/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#![cfg(test)]

use crate::mock::{new_test_ext, Aura, MockDisabledValidators, System, Test};
use crate::mock::{new_test_ext, Aura, MockDisabledValidators, System};
use codec::Encode;
use frame_support::traits::OnInitialize;
use sp_consensus_aura::{Slot, AURA_ENGINE_ID};
Expand Down Expand Up @@ -59,6 +59,8 @@ fn disabled_validators_cannot_author_blocks() {
#[should_panic(expected = "Slot must increase")]
fn pallet_requires_slot_to_increase_unless_allowed() {
new_test_ext(vec![0, 1, 2, 3]).execute_with(|| {
crate::mock::AllowMultipleBlocksPerSlot::set(false);

let slot = Slot::from(1);
let pre_digest =
Digest { logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())] };
Expand All @@ -82,7 +84,7 @@ fn pallet_can_allow_unchanged_slot() {
System::reset_events();
System::initialize(&42, &System::parent_hash(), &pre_digest);

crate::AllowMultipleBlocksPerSlot::<Test>::put(true);
crate::mock::AllowMultipleBlocksPerSlot::set(true);

// and we should be able to initialize the block with the same slot a second time.
Aura::on_initialize(42);
Expand All @@ -101,7 +103,7 @@ fn pallet_always_rejects_decreasing_slot() {
System::reset_events();
System::initialize(&42, &System::parent_hash(), &pre_digest);

crate::AllowMultipleBlocksPerSlot::<Test>::put(true);
crate::mock::AllowMultipleBlocksPerSlot::set(true);

Aura::on_initialize(42);
System::finalize();
Expand Down

0 comments on commit e595b23

Please sign in to comment.