4
4
{-# LANGUAGE FlexibleContexts #-}
5
5
{-# LANGUAGE FlexibleInstances #-}
6
6
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
7
+ {-# LANGUAGE RecordWildCards #-}
7
8
{-# LANGUAGE ScopedTypeVariables #-}
8
9
{-# LANGUAGE TypeFamilies #-}
9
10
{-# LANGUAGE UndecidableInstances #-}
@@ -14,14 +15,22 @@ module Ouroboros.Consensus.Block.SupportsPeras
14
15
, boostPerCert
15
16
, BlockSupportsPeras (.. )
16
17
, PerasCert (.. )
18
+ , encodePerasRoundNo
19
+ , decodePerasRoundNo
20
+ , encodePerasCert
21
+ , decodePerasCert
17
22
) where
18
23
24
+ import qualified Codec.CBOR.Decoding as CBOR
25
+ import qualified Codec.CBOR.Encoding as CBOR
19
26
import Data.Monoid (Sum (.. ))
27
+ import Data.Proxy (Proxy )
20
28
import Data.Word (Word64 )
21
29
import GHC.Generics (Generic )
22
30
import NoThunks.Class
23
31
import Ouroboros.Consensus.Block.Abstract
24
32
import Ouroboros.Consensus.Util.Condense
33
+ import Ouroboros.Network.Block (decodePoint , encodePoint )
25
34
import Quiet (Quiet (.. ))
26
35
27
36
newtype PerasRoundNo = PerasRoundNo { unPerasRoundNo :: Word64 }
@@ -66,3 +75,22 @@ instance StandardHash blk => BlockSupportsPeras blk where
66
75
67
76
perasCertRound = pcCertRound
68
77
perasCertBoostedBlock = pcCertBoostedBlock
78
+
79
+ encodePerasRoundNo :: PerasRoundNo -> CBOR. Encoding
80
+ encodePerasRoundNo (PerasRoundNo {.. }) =
81
+ CBOR. encodeWord64 unPerasRoundNo
82
+
83
+ decodePerasRoundNo :: forall s . CBOR. Decoder s PerasRoundNo
84
+ decodePerasRoundNo =
85
+ PerasRoundNo <$> CBOR. decodeWord64
86
+
87
+ encodePerasCert :: forall blk . ConvertRawHash blk => Proxy blk -> PerasCert blk -> CBOR. Encoding
88
+ encodePerasCert p (PerasCert {.. }) =
89
+ encodePerasRoundNo pcCertRound
90
+ <> (encodePoint (encodeRawHash p) pcCertBoostedBlock)
91
+
92
+ decodePerasCert :: forall s blk . ConvertRawHash blk => Proxy blk -> CBOR. Decoder s (PerasCert blk )
93
+ decodePerasCert p =
94
+ PerasCert
95
+ <$> decodePerasRoundNo
96
+ <*> (decodePoint (decodeRawHash p))
0 commit comments