Skip to content

Commit 124925a

Browse files
committed
First attempt adding codec for PerasCertDiffusion
Move encode/decode functions for certs to proper file
1 parent cd32fac commit 124925a

File tree

4 files changed

+55
-3
lines changed
  • ouroboros-consensus-diffusion/src
    • ouroboros-consensus-diffusion/Ouroboros/Consensus/Network
    • unstable-diffusion-testlib/Test/ThreadNet
  • ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus

4 files changed

+55
-3
lines changed

ouroboros-consensus-diffusion/src/ouroboros-consensus-diffusion/Ouroboros/Consensus/Network/NodeToNode.hs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ import Ouroboros.Network.Protocol.KeepAlive.Client
128128
import Ouroboros.Network.Protocol.KeepAlive.Codec
129129
import Ouroboros.Network.Protocol.KeepAlive.Server
130130
import Ouroboros.Network.Protocol.KeepAlive.Type
131+
import Ouroboros.Network.Protocol.ObjectDiffusion.Codec
132+
( codecObjectDiffusion
133+
, codecObjectDiffusionId
134+
)
131135
import Ouroboros.Network.Protocol.PeerSharing.Client
132136
( PeerSharingClient
133137
, peerSharingClientPeer
@@ -337,14 +341,15 @@ mkHandlers
337341
-------------------------------------------------------------------------------}
338342

339343
-- | Node-to-node protocol codecs needed to run 'Handlers'.
340-
data Codecs blk addr e m bCS bSCS bBF bSBF bTX bKA bPS = Codecs
344+
data Codecs blk addr e m bCS bSCS bBF bSBF bTX bPCD bKA bPS = Codecs
341345
{ cChainSyncCodec :: Codec (ChainSync (Header blk) (Point blk) (Tip blk)) e m bCS
342346
, cChainSyncCodecSerialised ::
343347
Codec (ChainSync (SerialisedHeader blk) (Point blk) (Tip blk)) e m bSCS
344348
, cBlockFetchCodec :: Codec (BlockFetch blk (Point blk)) e m bBF
345349
, cBlockFetchCodecSerialised ::
346350
Codec (BlockFetch (Serialised blk) (Point blk)) e m bSBF
347351
, cTxSubmission2Codec :: Codec (TxSubmission2 (GenTxId blk) (GenTx blk)) e m bTX
352+
, cPerasCertDiffusionCodec :: Codec (PerasCertDiffusion blk) e m bPCD
348353
, cKeepAliveCodec :: Codec KeepAlive e m bKA
349354
, cPeerSharingCodec :: Codec (PeerSharing addr) e m bPS
350355
}
@@ -372,6 +377,7 @@ defaultCodecs ::
372377
ByteString
373378
ByteString
374379
ByteString
380+
ByteString
375381
defaultCodecs ccfg version encAddr decAddr nodeToNodeVersion =
376382
Codecs
377383
{ cChainSyncCodec =
@@ -408,6 +414,12 @@ defaultCodecs ccfg version encAddr decAddr nodeToNodeVersion =
408414
dec
409415
enc
410416
dec
417+
, cPerasCertDiffusionCodec =
418+
codecObjectDiffusion
419+
encodePerasRoundNo
420+
decodePerasRoundNo
421+
(encodePerasCert p)
422+
(decodePerasCert p)
411423
, cKeepAliveCodec = codecKeepAlive_v2
412424
, cPeerSharingCodec = codecPeerSharing (encAddr nodeToNodeVersion) (decAddr nodeToNodeVersion)
413425
}
@@ -434,6 +446,7 @@ identityCodecs ::
434446
(AnyMessage (BlockFetch blk (Point blk)))
435447
(AnyMessage (BlockFetch (Serialised blk) (Point blk)))
436448
(AnyMessage (TxSubmission2 (GenTxId blk) (GenTx blk)))
449+
(AnyMessage (PerasCertDiffusion blk))
437450
(AnyMessage KeepAlive)
438451
(AnyMessage (PeerSharing addr))
439452
identityCodecs =
@@ -443,6 +456,7 @@ identityCodecs =
443456
, cBlockFetchCodec = codecBlockFetchId
444457
, cBlockFetchCodecSerialised = codecBlockFetchId
445458
, cTxSubmission2Codec = codecTxSubmission2Id
459+
, cPerasCertDiffusionCodec = codecObjectDiffusionId
446460
, cKeepAliveCodec = codecKeepAliveId
447461
, cPeerSharingCodec = codecPeerSharingId
448462
}
@@ -620,7 +634,7 @@ byteLimits =
620634

621635
-- | Construct the 'NetworkApplication' for the node-to-node protocols
622636
mkApps ::
623-
forall m addrNTN addrNTC blk e bCS bBF bTX bKA bPS.
637+
forall m addrNTN addrNTC blk e bCS bBF bTX bPCD bKA bPS.
624638
( IOLike m
625639
, MonadTimer m
626640
, Ord addrNTN
@@ -635,7 +649,7 @@ mkApps ::
635649
NodeKernel m addrNTN addrNTC blk ->
636650
StdGen ->
637651
Tracers m addrNTN blk e ->
638-
(NodeToNodeVersion -> Codecs blk addrNTN e m bCS bCS bBF bBF bTX bKA bPS) ->
652+
(NodeToNodeVersion -> Codecs blk addrNTN e m bCS bCS bBF bBF bTX bPCD bKA bPS) ->
639653
ByteLimits bCS bBF bTX bKA ->
640654
-- Chain-Sync timeouts for chain-sync client (using `Header blk`) as well as
641655
-- the server (`SerialisedHeader blk`).

ouroboros-consensus-diffusion/src/unstable-diffusion-testlib/Test/ThreadNet/Network.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ import Ouroboros.Consensus.Mempool
8383
import qualified Ouroboros.Consensus.MiniProtocol.ChainSync.Client as CSClient
8484
import qualified Ouroboros.Consensus.MiniProtocol.ChainSync.Client.HistoricityCheck as HistoricityCheck
8585
import qualified Ouroboros.Consensus.MiniProtocol.ChainSync.Client.InFutureCheck as InFutureCheck
86+
import Ouroboros.Consensus.MiniProtocol.ObjectDiffusion.PerasCert (PerasCertDiffusion)
8687
import qualified Ouroboros.Consensus.Network.NodeToNode as NTN
8788
import Ouroboros.Consensus.Node.ExitPolicy
8889
import qualified Ouroboros.Consensus.Node.GSM as GSM
@@ -1180,6 +1181,7 @@ runThreadNetwork
11801181
Lazy.ByteString
11811182
Lazy.ByteString
11821183
(AnyMessage (TxSubmission2 (GenTxId blk) (GenTx blk)))
1184+
(AnyMessage (PerasCertDiffusion blk))
11831185
(AnyMessage KeepAlive)
11841186
(AnyMessage (PeerSharing NodeId))
11851187
customNodeToNodeCodecs cfg ntnVersion =
@@ -1199,6 +1201,9 @@ runThreadNetwork
11991201
, cTxSubmission2Codec =
12001202
mapFailureCodec CodecIdFailure $
12011203
NTN.cTxSubmission2Codec NTN.identityCodecs
1204+
, cPerasCertDiffusionCodec =
1205+
mapFailureCodec CodecIdFailure $
1206+
NTN.cPerasCertDiffusionCodec NTN.identityCodecs
12021207
, cKeepAliveCodec =
12031208
mapFailureCodec CodecIdFailure $
12041209
NTN.cKeepAliveCodec NTN.identityCodecs

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/SupportsPeras.hs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
{-# LANGUAGE FlexibleContexts #-}
55
{-# LANGUAGE FlexibleInstances #-}
66
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
7+
{-# LANGUAGE RecordWildCards #-}
78
{-# LANGUAGE ScopedTypeVariables #-}
89
{-# LANGUAGE TypeFamilies #-}
910
{-# LANGUAGE UndecidableInstances #-}
@@ -14,14 +15,22 @@ module Ouroboros.Consensus.Block.SupportsPeras
1415
, boostPerCert
1516
, BlockSupportsPeras (..)
1617
, PerasCert (..)
18+
, encodePerasRoundNo
19+
, decodePerasRoundNo
20+
, encodePerasCert
21+
, decodePerasCert
1722
) where
1823

24+
import qualified Codec.CBOR.Decoding as CBOR
25+
import qualified Codec.CBOR.Encoding as CBOR
1926
import Data.Monoid (Sum (..))
27+
import Data.Proxy (Proxy)
2028
import Data.Word (Word64)
2129
import GHC.Generics (Generic)
2230
import NoThunks.Class
2331
import Ouroboros.Consensus.Block.Abstract
2432
import Ouroboros.Consensus.Util.Condense
33+
import Ouroboros.Network.Block (decodePoint, encodePoint)
2534
import Quiet (Quiet (..))
2635

2736
newtype PerasRoundNo = PerasRoundNo {unPerasRoundNo :: Word64}
@@ -66,3 +75,22 @@ instance StandardHash blk => BlockSupportsPeras blk where
6675

6776
perasCertRound = pcCertRound
6877
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))

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/MiniProtocol/ObjectDiffusion/PerasCert.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module Ouroboros.Consensus.MiniProtocol.ObjectDiffusion.PerasCert
77
, PerasCertPoolWriter
88
, PerasCertDiffusionInboundPipelined
99
, PerasCertDiffusionOutbound
10+
, PerasCertDiffusion
1011
) where
1112

1213
import Ouroboros.Consensus.Block
@@ -16,6 +17,7 @@ import Ouroboros.Consensus.MiniProtocol.ObjectDiffusion.Outbound
1617
import Ouroboros.Consensus.Storage.PerasCertDB.API
1718
import Ouroboros.Network.Protocol.ObjectDiffusion.Inbound (ObjectDiffusionInboundPipelined)
1819
import Ouroboros.Network.Protocol.ObjectDiffusion.Outbound (ObjectDiffusionOutbound)
20+
import Ouroboros.Network.Protocol.ObjectDiffusion.Type (ObjectDiffusion, OutboundAgency)
1921

2022
type TracePerasCertDiffusionInbound blk =
2123
TraceObjectDiffusionInbound PerasRoundNo (PerasCert blk)
@@ -34,3 +36,6 @@ type PerasCertDiffusionInboundPipelined blk m a =
3436

3537
type PerasCertDiffusionOutbound blk m a =
3638
ObjectDiffusionOutbound PerasRoundNo (PerasCert blk) m a
39+
40+
type PerasCertDiffusion blk =
41+
ObjectDiffusion OutboundAgency PerasRoundNo (PerasCert blk)

0 commit comments

Comments
 (0)