En fait cette valeur est définie dans une constante mais juste utilisée dans le système de signalement des équivocations :
# runtime/gtest/src/parameters.rs
// Babe
pub const EPOCH_DURATION_IN_SLOTS: BlockNumber = HOURS;
parameter_types! {
pub const EpochDuration: u64 = EPOCH_DURATION_IN_SLOTS as u64;
pub const ExpectedBlockTime: u64 = MILLISECS_PER_BLOCK;
pub const ReportLongevity: BlockNumber = 168 * EPOCH_DURATION_IN_SLOTS;
}
# runtime/common/src/pallets_config.rs
impl pallet_babe::Config for Runtime {
type EquivocationReportSystem =
pallet_babe::EquivocationReportSystem<Self, Offences, Historical, ReportLongevity>;
Ce type est juste utilisé comme un getter dans le code de babe :
pub struct EquivocationReportSystem<T, R, P, L>(core::marker::PhantomData<(T, R, P, L)>);
impl<T, R, P, L>
OffenceReportSystem<Option<T::AccountId>, (EquivocationProof<HeaderFor<T>>, T::KeyOwnerProof)>
for EquivocationReportSystem<T, R, P, L>
where
T: Config + pallet_authorship::Config + frame_system::offchain::CreateInherent<Call<T>>,
R: ReportOffence<
T::AccountId,
P::IdentificationTuple,
EquivocationOffence<P::IdentificationTuple>,
>,
P: KeyOwnerProofSystem<(KeyTypeId, AuthorityId), Proof = T::KeyOwnerProof>,
P::IdentificationTuple: Clone,
L: Get<u64>,
{
type Longevity = L;
Donc visiblement c’est conçu pour pouvoir être une fonction mais en pratique ça retourne qu’une constante hardcodée. Dans notre cas tu peux hardcoder le 168. D’ailleurs on pourrait changer cette valeur. Ça dépend de notre réactivité à rapporter des équivocations ><
Mais je pense que c’est une attaque un peu sophistiquée et qu’on a d’autres mécanismes de défense contre, donc on pourrait réduire la valeur sans problème.