module Cardano.Ledger.Shelley.StabilityWindow (
computeStabilityWindow,
computeRandomnessStabilisationWindow,
) where
import Cardano.Ledger.BaseTypes
import Data.Word (Word64)
computeStabilityWindow ::
Word64 ->
ActiveSlotCoeff ->
Word64
computeStabilityWindow :: Word64 -> ActiveSlotCoeff -> Word64
computeStabilityWindow Word64
k ActiveSlotCoeff
asc =
Rational -> Word64
forall b. Integral b => Rational -> b
forall a b. (RealFrac a, Integral b) => a -> b
ceiling (Rational -> Word64) -> Rational -> Word64
forall a b. (a -> b) -> a -> b
$ (Rational
3 Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
* Word64 -> Rational
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
k) Rational -> NonZero Rational -> Rational
forall a. Fractional a => a -> NonZero a -> a
/. NonZero Rational
f
where
f :: NonZero Rational
f = PositiveUnitInterval -> NonZero Rational
positiveUnitIntervalNonZeroRational (PositiveUnitInterval -> NonZero Rational)
-> (ActiveSlotCoeff -> PositiveUnitInterval)
-> ActiveSlotCoeff
-> NonZero Rational
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ActiveSlotCoeff -> PositiveUnitInterval
activeSlotVal (ActiveSlotCoeff -> NonZero Rational)
-> ActiveSlotCoeff -> NonZero Rational
forall a b. (a -> b) -> a -> b
$ ActiveSlotCoeff
asc
computeRandomnessStabilisationWindow ::
Word64 ->
ActiveSlotCoeff ->
Word64
computeRandomnessStabilisationWindow :: Word64 -> ActiveSlotCoeff -> Word64
computeRandomnessStabilisationWindow Word64
k ActiveSlotCoeff
asc =
Rational -> Word64
forall b. Integral b => Rational -> b
forall a b. (RealFrac a, Integral b) => a -> b
ceiling (Rational -> Word64) -> Rational -> Word64
forall a b. (a -> b) -> a -> b
$ (Rational
4 Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
* Word64 -> Rational
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
k) Rational -> NonZero Rational -> Rational
forall a. Fractional a => a -> NonZero a -> a
/. NonZero Rational
f
where
f :: NonZero Rational
f = PositiveUnitInterval -> NonZero Rational
positiveUnitIntervalNonZeroRational (PositiveUnitInterval -> NonZero Rational)
-> (ActiveSlotCoeff -> PositiveUnitInterval)
-> ActiveSlotCoeff
-> NonZero Rational
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ActiveSlotCoeff -> PositiveUnitInterval
activeSlotVal (ActiveSlotCoeff -> NonZero Rational)
-> ActiveSlotCoeff -> NonZero Rational
forall a b. (a -> b) -> a -> b
$ ActiveSlotCoeff
asc