{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS -Wno-orphans #-}
module Ouroboros.Consensus.ByronSpec.Ledger.Block
( BlockConfig (..)
, ByronSpecBlock (..)
, CodecConfig (..)
, Header (..)
, StorageConfig (..)
, ByronSpecHeader
) where
import qualified Byron.Spec.Chain.STS.Block as Spec
import qualified Byron.Spec.Ledger.Core as Spec
import Codec.Serialise
import Control.DeepSeq (NFData (..))
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks)
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.ByronSpec.Ledger.Conversions
import Ouroboros.Consensus.ByronSpec.Ledger.Orphans ()
data ByronSpecBlock = ByronSpecBlock
{ ByronSpecBlock -> Block
byronSpecBlock :: Spec.Block
, ByronSpecBlock -> BlockNo
byronSpecBlockNo :: BlockNo
, ByronSpecBlock -> Hash
byronSpecBlockHash :: Spec.Hash
}
deriving (Int -> ByronSpecBlock -> ShowS
[ByronSpecBlock] -> ShowS
ByronSpecBlock -> String
(Int -> ByronSpecBlock -> ShowS)
-> (ByronSpecBlock -> String)
-> ([ByronSpecBlock] -> ShowS)
-> Show ByronSpecBlock
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ByronSpecBlock -> ShowS
showsPrec :: Int -> ByronSpecBlock -> ShowS
$cshow :: ByronSpecBlock -> String
show :: ByronSpecBlock -> String
$cshowList :: [ByronSpecBlock] -> ShowS
showList :: [ByronSpecBlock] -> ShowS
Show, ByronSpecBlock -> ByronSpecBlock -> Bool
(ByronSpecBlock -> ByronSpecBlock -> Bool)
-> (ByronSpecBlock -> ByronSpecBlock -> Bool) -> Eq ByronSpecBlock
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ByronSpecBlock -> ByronSpecBlock -> Bool
== :: ByronSpecBlock -> ByronSpecBlock -> Bool
$c/= :: ByronSpecBlock -> ByronSpecBlock -> Bool
/= :: ByronSpecBlock -> ByronSpecBlock -> Bool
Eq, (forall x. ByronSpecBlock -> Rep ByronSpecBlock x)
-> (forall x. Rep ByronSpecBlock x -> ByronSpecBlock)
-> Generic ByronSpecBlock
forall x. Rep ByronSpecBlock x -> ByronSpecBlock
forall x. ByronSpecBlock -> Rep ByronSpecBlock x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ByronSpecBlock -> Rep ByronSpecBlock x
from :: forall x. ByronSpecBlock -> Rep ByronSpecBlock x
$cto :: forall x. Rep ByronSpecBlock x -> ByronSpecBlock
to :: forall x. Rep ByronSpecBlock x -> ByronSpecBlock
Generic, [ByronSpecBlock] -> Encoding
ByronSpecBlock -> Encoding
(ByronSpecBlock -> Encoding)
-> (forall s. Decoder s ByronSpecBlock)
-> ([ByronSpecBlock] -> Encoding)
-> (forall s. Decoder s [ByronSpecBlock])
-> Serialise ByronSpecBlock
forall s. Decoder s [ByronSpecBlock]
forall s. Decoder s ByronSpecBlock
forall a.
(a -> Encoding)
-> (forall s. Decoder s a)
-> ([a] -> Encoding)
-> (forall s. Decoder s [a])
-> Serialise a
$cencode :: ByronSpecBlock -> Encoding
encode :: ByronSpecBlock -> Encoding
$cdecode :: forall s. Decoder s ByronSpecBlock
decode :: forall s. Decoder s ByronSpecBlock
$cencodeList :: [ByronSpecBlock] -> Encoding
encodeList :: [ByronSpecBlock] -> Encoding
$cdecodeList :: forall s. Decoder s [ByronSpecBlock]
decodeList :: forall s. Decoder s [ByronSpecBlock]
Serialise)
instance NFData ByronSpecBlock where
rnf :: ByronSpecBlock -> ()
rnf ByronSpecBlock{Block
Hash
BlockNo
byronSpecBlock :: ByronSpecBlock -> Block
byronSpecBlockNo :: ByronSpecBlock -> BlockNo
byronSpecBlockHash :: ByronSpecBlock -> Hash
byronSpecBlock :: Block
byronSpecBlockNo :: BlockNo
byronSpecBlockHash :: Hash
..} =
Block
byronSpecBlock Block -> () -> ()
forall a b. a -> b -> b
`seq`
Hash
byronSpecBlockHash Hash -> () -> ()
forall a b. a -> b -> b
`seq`
BlockNo -> ()
forall a. NFData a => a -> ()
rnf BlockNo
byronSpecBlockNo
data instance ByronSpecBlock =
{ :: Spec.BlockHeader
, :: BlockNo
, :: Spec.Hash
}
deriving (Int -> Header ByronSpecBlock -> ShowS
[Header ByronSpecBlock] -> ShowS
Header ByronSpecBlock -> String
(Int -> Header ByronSpecBlock -> ShowS)
-> (Header ByronSpecBlock -> String)
-> ([Header ByronSpecBlock] -> ShowS)
-> Show (Header ByronSpecBlock)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Header ByronSpecBlock -> ShowS
showsPrec :: Int -> Header ByronSpecBlock -> ShowS
$cshow :: Header ByronSpecBlock -> String
show :: Header ByronSpecBlock -> String
$cshowList :: [Header ByronSpecBlock] -> ShowS
showList :: [Header ByronSpecBlock] -> ShowS
Show, Header ByronSpecBlock -> Header ByronSpecBlock -> Bool
(Header ByronSpecBlock -> Header ByronSpecBlock -> Bool)
-> (Header ByronSpecBlock -> Header ByronSpecBlock -> Bool)
-> Eq (Header ByronSpecBlock)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Header ByronSpecBlock -> Header ByronSpecBlock -> Bool
== :: Header ByronSpecBlock -> Header ByronSpecBlock -> Bool
$c/= :: Header ByronSpecBlock -> Header ByronSpecBlock -> Bool
/= :: Header ByronSpecBlock -> Header ByronSpecBlock -> Bool
Eq, (forall x. Header ByronSpecBlock -> Rep (Header ByronSpecBlock) x)
-> (forall x.
Rep (Header ByronSpecBlock) x -> Header ByronSpecBlock)
-> Generic (Header ByronSpecBlock)
forall x. Rep (Header ByronSpecBlock) x -> Header ByronSpecBlock
forall x. Header ByronSpecBlock -> Rep (Header ByronSpecBlock) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Header ByronSpecBlock -> Rep (Header ByronSpecBlock) x
from :: forall x. Header ByronSpecBlock -> Rep (Header ByronSpecBlock) x
$cto :: forall x. Rep (Header ByronSpecBlock) x -> Header ByronSpecBlock
to :: forall x. Rep (Header ByronSpecBlock) x -> Header ByronSpecBlock
Generic, [Header ByronSpecBlock] -> Encoding
Header ByronSpecBlock -> Encoding
(Header ByronSpecBlock -> Encoding)
-> (forall s. Decoder s (Header ByronSpecBlock))
-> ([Header ByronSpecBlock] -> Encoding)
-> (forall s. Decoder s [Header ByronSpecBlock])
-> Serialise (Header ByronSpecBlock)
forall s. Decoder s [Header ByronSpecBlock]
forall s. Decoder s (Header ByronSpecBlock)
forall a.
(a -> Encoding)
-> (forall s. Decoder s a)
-> ([a] -> Encoding)
-> (forall s. Decoder s [a])
-> Serialise a
$cencode :: Header ByronSpecBlock -> Encoding
encode :: Header ByronSpecBlock -> Encoding
$cdecode :: forall s. Decoder s (Header ByronSpecBlock)
decode :: forall s. Decoder s (Header ByronSpecBlock)
$cencodeList :: [Header ByronSpecBlock] -> Encoding
encodeList :: [Header ByronSpecBlock] -> Encoding
$cdecodeList :: forall s. Decoder s [Header ByronSpecBlock]
decodeList :: forall s. Decoder s [Header ByronSpecBlock]
Serialise)
instance GetHeader ByronSpecBlock where
getHeader :: ByronSpecBlock -> Header ByronSpecBlock
getHeader ByronSpecBlock{Block
Hash
BlockNo
byronSpecBlock :: ByronSpecBlock -> Block
byronSpecBlockNo :: ByronSpecBlock -> BlockNo
byronSpecBlockHash :: ByronSpecBlock -> Hash
byronSpecBlock :: Block
byronSpecBlockNo :: BlockNo
byronSpecBlockHash :: Hash
..} =
ByronSpecHeader
{ byronSpecHeader :: BlockHeader
byronSpecHeader = Block -> BlockHeader
Spec._bHeader Block
byronSpecBlock
, byronSpecHeaderNo :: BlockNo
byronSpecHeaderNo = BlockNo
byronSpecBlockNo
, byronSpecHeaderHash :: Hash
byronSpecHeaderHash = Hash
byronSpecBlockHash
}
blockMatchesHeader :: Header ByronSpecBlock -> ByronSpecBlock -> Bool
blockMatchesHeader Header ByronSpecBlock
hdr ByronSpecBlock
blk = Header ByronSpecBlock -> HeaderHash (Header ByronSpecBlock)
forall b. HasHeader b => b -> HeaderHash b
blockHash Header ByronSpecBlock
hdr Hash -> Hash -> Bool
forall a. Eq a => a -> a -> Bool
== ByronSpecBlock -> HeaderHash ByronSpecBlock
forall b. HasHeader b => b -> HeaderHash b
blockHash ByronSpecBlock
blk
headerIsEBB :: Header ByronSpecBlock -> Maybe EpochNo
headerIsEBB = Maybe EpochNo -> Header ByronSpecBlock -> Maybe EpochNo
forall a b. a -> b -> a
const Maybe EpochNo
forall a. Maybe a
Nothing
type = Header ByronSpecBlock
type instance ByronSpecBlock = Spec.Hash
instance NFData Spec.Hash where
rnf :: Hash -> ()
rnf Hash
hash = Hash
hash Hash -> () -> ()
forall a b. a -> b -> b
`seq` ()
instance StandardHash ByronSpecBlock
instance HasHeader ByronSpecBlock where
getHeaderFields :: ByronSpecBlock -> HeaderFields ByronSpecBlock
getHeaderFields = ByronSpecBlock -> HeaderFields ByronSpecBlock
forall blk. GetHeader blk => blk -> HeaderFields blk
getBlockHeaderFields
instance HasHeader ByronSpecHeader where
getHeaderFields :: Header ByronSpecBlock -> HeaderFields (Header ByronSpecBlock)
getHeaderFields Header ByronSpecBlock
hdr =
HeaderFields
{ headerFieldHash :: HeaderHash (Header ByronSpecBlock)
headerFieldHash = Header ByronSpecBlock -> Hash
byronSpecHeaderHash Header ByronSpecBlock
hdr
, headerFieldBlockNo :: BlockNo
headerFieldBlockNo = Header ByronSpecBlock -> BlockNo
byronSpecHeaderNo Header ByronSpecBlock
hdr
, headerFieldSlot :: SlotNo
headerFieldSlot = Slot -> SlotNo
fromByronSpecSlotNo (Slot -> SlotNo) -> (BlockHeader -> Slot) -> BlockHeader -> SlotNo
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlockHeader -> Slot
Spec._bhSlot (BlockHeader -> SlotNo) -> BlockHeader -> SlotNo
forall a b. (a -> b) -> a -> b
$ Header ByronSpecBlock -> BlockHeader
byronSpecHeader Header ByronSpecBlock
hdr
}
instance GetPrevHash ByronSpecBlock where
headerPrevHash :: Header ByronSpecBlock -> ChainHash ByronSpecBlock
headerPrevHash = (Hash -> HeaderHash ByronSpecBlock)
-> Hash -> ChainHash ByronSpecBlock
forall b. (Hash -> HeaderHash b) -> Hash -> ChainHash b
fromByronSpecPrevHash Hash -> Hash
Hash -> HeaderHash ByronSpecBlock
forall a. a -> a
id (Hash -> ChainHash ByronSpecBlock)
-> (Header ByronSpecBlock -> Hash)
-> Header ByronSpecBlock
-> ChainHash ByronSpecBlock
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BlockHeader -> Hash
Spec._bhPrevHash (BlockHeader -> Hash)
-> (Header ByronSpecBlock -> BlockHeader)
-> Header ByronSpecBlock
-> Hash
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Header ByronSpecBlock -> BlockHeader
byronSpecHeader
data instance BlockConfig ByronSpecBlock = ByronSpecBlockConfig
deriving ((forall x.
BlockConfig ByronSpecBlock -> Rep (BlockConfig ByronSpecBlock) x)
-> (forall x.
Rep (BlockConfig ByronSpecBlock) x -> BlockConfig ByronSpecBlock)
-> Generic (BlockConfig ByronSpecBlock)
forall x.
Rep (BlockConfig ByronSpecBlock) x -> BlockConfig ByronSpecBlock
forall x.
BlockConfig ByronSpecBlock -> Rep (BlockConfig ByronSpecBlock) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
BlockConfig ByronSpecBlock -> Rep (BlockConfig ByronSpecBlock) x
from :: forall x.
BlockConfig ByronSpecBlock -> Rep (BlockConfig ByronSpecBlock) x
$cto :: forall x.
Rep (BlockConfig ByronSpecBlock) x -> BlockConfig ByronSpecBlock
to :: forall x.
Rep (BlockConfig ByronSpecBlock) x -> BlockConfig ByronSpecBlock
Generic, Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
Proxy (BlockConfig ByronSpecBlock) -> String
(Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo))
-> (Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo))
-> (Proxy (BlockConfig ByronSpecBlock) -> String)
-> NoThunks (BlockConfig ByronSpecBlock)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
noThunks :: Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> BlockConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (BlockConfig ByronSpecBlock) -> String
showTypeOf :: Proxy (BlockConfig ByronSpecBlock) -> String
NoThunks)
data instance CodecConfig ByronSpecBlock = ByronSpecCodecConfig
deriving ((forall x.
CodecConfig ByronSpecBlock -> Rep (CodecConfig ByronSpecBlock) x)
-> (forall x.
Rep (CodecConfig ByronSpecBlock) x -> CodecConfig ByronSpecBlock)
-> Generic (CodecConfig ByronSpecBlock)
forall x.
Rep (CodecConfig ByronSpecBlock) x -> CodecConfig ByronSpecBlock
forall x.
CodecConfig ByronSpecBlock -> Rep (CodecConfig ByronSpecBlock) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
CodecConfig ByronSpecBlock -> Rep (CodecConfig ByronSpecBlock) x
from :: forall x.
CodecConfig ByronSpecBlock -> Rep (CodecConfig ByronSpecBlock) x
$cto :: forall x.
Rep (CodecConfig ByronSpecBlock) x -> CodecConfig ByronSpecBlock
to :: forall x.
Rep (CodecConfig ByronSpecBlock) x -> CodecConfig ByronSpecBlock
Generic, Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
Proxy (CodecConfig ByronSpecBlock) -> String
(Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo))
-> (Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo))
-> (Proxy (CodecConfig ByronSpecBlock) -> String)
-> NoThunks (CodecConfig ByronSpecBlock)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
noThunks :: Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> CodecConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (CodecConfig ByronSpecBlock) -> String
showTypeOf :: Proxy (CodecConfig ByronSpecBlock) -> String
NoThunks)
data instance StorageConfig ByronSpecBlock = ByronSpecStorageConfig
deriving ((forall x.
StorageConfig ByronSpecBlock
-> Rep (StorageConfig ByronSpecBlock) x)
-> (forall x.
Rep (StorageConfig ByronSpecBlock) x
-> StorageConfig ByronSpecBlock)
-> Generic (StorageConfig ByronSpecBlock)
forall x.
Rep (StorageConfig ByronSpecBlock) x
-> StorageConfig ByronSpecBlock
forall x.
StorageConfig ByronSpecBlock
-> Rep (StorageConfig ByronSpecBlock) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
StorageConfig ByronSpecBlock
-> Rep (StorageConfig ByronSpecBlock) x
from :: forall x.
StorageConfig ByronSpecBlock
-> Rep (StorageConfig ByronSpecBlock) x
$cto :: forall x.
Rep (StorageConfig ByronSpecBlock) x
-> StorageConfig ByronSpecBlock
to :: forall x.
Rep (StorageConfig ByronSpecBlock) x
-> StorageConfig ByronSpecBlock
Generic, Context -> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
Proxy (StorageConfig ByronSpecBlock) -> String
(Context -> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo))
-> (Context
-> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo))
-> (Proxy (StorageConfig ByronSpecBlock) -> String)
-> NoThunks (StorageConfig ByronSpecBlock)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
noThunks :: Context -> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> StorageConfig ByronSpecBlock -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (StorageConfig ByronSpecBlock) -> String
showTypeOf :: Proxy (StorageConfig ByronSpecBlock) -> String
NoThunks)