module Byron.Spec.Ledger.GlobalParams
( epochFirstSlot
, lovelaceCap
, slotsPerEpoch
, slotsPerEpochToK
, c
)
where
import Data.Word (Word64)
import Byron.Spec.Ledger.Core (BlockCount (BlockCount), Epoch(..), Slot(..), lovelaceCap)
slotsPerEpoch :: Integral n => BlockCount -> n
slotsPerEpoch :: BlockCount -> n
slotsPerEpoch (BlockCount Word64
bc) = Word64 -> n
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Word64 -> n) -> Word64 -> n
forall a b. (a -> b) -> a -> b
$ Word64
bc Word64 -> Word64 -> Word64
forall a. Num a => a -> a -> a
* Word64
10
slotsPerEpochToK :: (Integral n) => n -> BlockCount
slotsPerEpochToK :: n -> BlockCount
slotsPerEpochToK n
n = Word64 -> BlockCount
BlockCount (Word64 -> BlockCount) -> Word64 -> BlockCount
forall a b. (a -> b) -> a -> b
$ Double -> Word64
forall a b. (RealFrac a, Integral b) => a -> b
floor (Double -> Word64) -> Double -> Word64
forall a b. (a -> b) -> a -> b
$ (n -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral n
n :: Double) Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
10
epochFirstSlot :: BlockCount -> Epoch -> Slot
epochFirstSlot :: BlockCount -> Epoch -> Slot
epochFirstSlot BlockCount
bc (Epoch Word64
epochs) = Word64 -> Slot
Slot (Word64 -> Slot) -> Word64 -> Slot
forall a b. (a -> b) -> a -> b
$ Word64
epochs Word64 -> Word64 -> Word64
forall a. Num a => a -> a -> a
* BlockCount -> Word64
forall n. Integral n => BlockCount -> n
slotsPerEpoch BlockCount
bc
c :: Word64
c :: Word64
c = Word64
4096