{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Ouroboros.Consensus.Storage.PerasCertDB.API
( PerasCertDB (..)
, AddPerasCertResult (..)
, PerasCertSnapshot (..)
, PerasCertTicketNo
, zeroPerasCertTicketNo
) where
import Data.Map (Map)
import Data.Word (Word64)
import NoThunks.Class
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.Peras.Weight
import Ouroboros.Consensus.Util.IOLike
import Ouroboros.Consensus.Util.STM (WithFingerprint (..))
data PerasCertDB m blk = PerasCertDB
{ forall (m :: * -> *) blk.
PerasCertDB m blk -> ValidatedPerasCert blk -> m AddPerasCertResult
addCert :: ValidatedPerasCert blk -> m AddPerasCertResult
, forall (m :: * -> *) blk.
PerasCertDB m blk
-> STM m (WithFingerprint (PerasWeightSnapshot blk))
getWeightSnapshot :: STM m (WithFingerprint (PerasWeightSnapshot blk))
, forall (m :: * -> *) blk.
PerasCertDB m blk -> STM m (PerasCertSnapshot blk)
getCertSnapshot :: STM m (PerasCertSnapshot blk)
, forall (m :: * -> *) blk. PerasCertDB m blk -> SlotNo -> m ()
garbageCollect :: SlotNo -> m ()
, forall (m :: * -> *) blk. PerasCertDB m blk -> m ()
closeDB :: m ()
}
deriving Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo)
Proxy (PerasCertDB m blk) -> String
(Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo))
-> (Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo))
-> (Proxy (PerasCertDB m blk) -> String)
-> NoThunks (PerasCertDB m blk)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
forall (m :: * -> *) blk.
Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo)
forall (m :: * -> *) blk. Proxy (PerasCertDB m blk) -> String
$cnoThunks :: forall (m :: * -> *) blk.
Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo)
$cwNoThunks :: forall (m :: * -> *) blk.
Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasCertDB m blk -> IO (Maybe ThunkInfo)
$cshowTypeOf :: forall (m :: * -> *) blk. Proxy (PerasCertDB m blk) -> String
showTypeOf :: Proxy (PerasCertDB m blk) -> String
NoThunks via OnlyCheckWhnfNamed "PerasCertDB" (PerasCertDB m blk)
data AddPerasCertResult = AddedPerasCertToDB | PerasCertAlreadyInDB
deriving stock (Int -> AddPerasCertResult -> ShowS
[AddPerasCertResult] -> ShowS
AddPerasCertResult -> String
(Int -> AddPerasCertResult -> ShowS)
-> (AddPerasCertResult -> String)
-> ([AddPerasCertResult] -> ShowS)
-> Show AddPerasCertResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AddPerasCertResult -> ShowS
showsPrec :: Int -> AddPerasCertResult -> ShowS
$cshow :: AddPerasCertResult -> String
show :: AddPerasCertResult -> String
$cshowList :: [AddPerasCertResult] -> ShowS
showList :: [AddPerasCertResult] -> ShowS
Show, AddPerasCertResult -> AddPerasCertResult -> Bool
(AddPerasCertResult -> AddPerasCertResult -> Bool)
-> (AddPerasCertResult -> AddPerasCertResult -> Bool)
-> Eq AddPerasCertResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AddPerasCertResult -> AddPerasCertResult -> Bool
== :: AddPerasCertResult -> AddPerasCertResult -> Bool
$c/= :: AddPerasCertResult -> AddPerasCertResult -> Bool
/= :: AddPerasCertResult -> AddPerasCertResult -> Bool
Eq)
data PerasCertSnapshot blk = PerasCertSnapshot
{ forall blk. PerasCertSnapshot blk -> PerasRoundNo -> Bool
containsCert :: PerasRoundNo -> Bool
, forall blk.
PerasCertSnapshot blk
-> PerasCertTicketNo
-> Map PerasCertTicketNo (ValidatedPerasCert blk)
getCertsAfter :: PerasCertTicketNo -> Map PerasCertTicketNo (ValidatedPerasCert blk)
}
newtype PerasCertTicketNo = PerasCertTicketNo Word64
deriving stock Int -> PerasCertTicketNo -> ShowS
[PerasCertTicketNo] -> ShowS
PerasCertTicketNo -> String
(Int -> PerasCertTicketNo -> ShowS)
-> (PerasCertTicketNo -> String)
-> ([PerasCertTicketNo] -> ShowS)
-> Show PerasCertTicketNo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PerasCertTicketNo -> ShowS
showsPrec :: Int -> PerasCertTicketNo -> ShowS
$cshow :: PerasCertTicketNo -> String
show :: PerasCertTicketNo -> String
$cshowList :: [PerasCertTicketNo] -> ShowS
showList :: [PerasCertTicketNo] -> ShowS
Show
deriving newtype (PerasCertTicketNo -> PerasCertTicketNo -> Bool
(PerasCertTicketNo -> PerasCertTicketNo -> Bool)
-> (PerasCertTicketNo -> PerasCertTicketNo -> Bool)
-> Eq PerasCertTicketNo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
== :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
$c/= :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
/= :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
Eq, Eq PerasCertTicketNo
Eq PerasCertTicketNo =>
(PerasCertTicketNo -> PerasCertTicketNo -> Ordering)
-> (PerasCertTicketNo -> PerasCertTicketNo -> Bool)
-> (PerasCertTicketNo -> PerasCertTicketNo -> Bool)
-> (PerasCertTicketNo -> PerasCertTicketNo -> Bool)
-> (PerasCertTicketNo -> PerasCertTicketNo -> Bool)
-> (PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo)
-> (PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo)
-> Ord PerasCertTicketNo
PerasCertTicketNo -> PerasCertTicketNo -> Bool
PerasCertTicketNo -> PerasCertTicketNo -> Ordering
PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PerasCertTicketNo -> PerasCertTicketNo -> Ordering
compare :: PerasCertTicketNo -> PerasCertTicketNo -> Ordering
$c< :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
< :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
$c<= :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
<= :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
$c> :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
> :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
$c>= :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
>= :: PerasCertTicketNo -> PerasCertTicketNo -> Bool
$cmax :: PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo
max :: PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo
$cmin :: PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo
min :: PerasCertTicketNo -> PerasCertTicketNo -> PerasCertTicketNo
Ord, Int -> PerasCertTicketNo
PerasCertTicketNo -> Int
PerasCertTicketNo -> [PerasCertTicketNo]
PerasCertTicketNo -> PerasCertTicketNo
PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
PerasCertTicketNo
-> PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
(PerasCertTicketNo -> PerasCertTicketNo)
-> (PerasCertTicketNo -> PerasCertTicketNo)
-> (Int -> PerasCertTicketNo)
-> (PerasCertTicketNo -> Int)
-> (PerasCertTicketNo -> [PerasCertTicketNo])
-> (PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo])
-> (PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo])
-> (PerasCertTicketNo
-> PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo])
-> Enum PerasCertTicketNo
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: PerasCertTicketNo -> PerasCertTicketNo
succ :: PerasCertTicketNo -> PerasCertTicketNo
$cpred :: PerasCertTicketNo -> PerasCertTicketNo
pred :: PerasCertTicketNo -> PerasCertTicketNo
$ctoEnum :: Int -> PerasCertTicketNo
toEnum :: Int -> PerasCertTicketNo
$cfromEnum :: PerasCertTicketNo -> Int
fromEnum :: PerasCertTicketNo -> Int
$cenumFrom :: PerasCertTicketNo -> [PerasCertTicketNo]
enumFrom :: PerasCertTicketNo -> [PerasCertTicketNo]
$cenumFromThen :: PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
enumFromThen :: PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
$cenumFromTo :: PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
enumFromTo :: PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
$cenumFromThenTo :: PerasCertTicketNo
-> PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
enumFromThenTo :: PerasCertTicketNo
-> PerasCertTicketNo -> PerasCertTicketNo -> [PerasCertTicketNo]
Enum, Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo)
Proxy PerasCertTicketNo -> String
(Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo))
-> (Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo))
-> (Proxy PerasCertTicketNo -> String)
-> NoThunks PerasCertTicketNo
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo)
noThunks :: Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> PerasCertTicketNo -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy PerasCertTicketNo -> String
showTypeOf :: Proxy PerasCertTicketNo -> String
NoThunks)
zeroPerasCertTicketNo :: PerasCertTicketNo
zeroPerasCertTicketNo :: PerasCertTicketNo
zeroPerasCertTicketNo = Word64 -> PerasCertTicketNo
PerasCertTicketNo Word64
0