@@ -10,7 +10,6 @@ module Main where
1010
1111import Control.Exception (throwIO )
1212import Control.Monad (void , when )
13- import Control.Monad.Class.MonadAsync
1413import Control.Tracer (Tracer (.. ), nullTracer , traceWith )
1514
1615import Data.Act
@@ -28,13 +27,15 @@ import System.Random (newStdGen, split)
2827import Cardano.Git.Rev (gitRev )
2928import Cardano.KESAgent.KES.Evolution qualified as KES
3029import Cardano.KESAgent.Protocols.StandardCrypto (StandardCrypto )
30+ import Cardano.Ledger.Keys (VKey (.. ))
31+ import Cardano.Ledger.Hashes (hashKey )
3132
3233import DMQ.Configuration
3334import DMQ.Configuration.CLIOptions (parseCLIOptions )
3435import DMQ.Configuration.Topology (readTopologyFileOrError )
3536import DMQ.Diffusion.Applications (diffusionApplications )
3637import DMQ.Diffusion.Arguments
37- import DMQ.Diffusion.NodeKernel ( mempool , withNodeKernel )
38+ import DMQ.Diffusion.NodeKernel
3839import DMQ.Handlers.TopLevel (toplevelExceptionHandler )
3940import DMQ.NodeToClient qualified as NtC
4041import DMQ.NodeToNode (NodeToNodeVersion , dmqCodecs , dmqLimitsAndTimeouts ,
@@ -45,9 +46,11 @@ import DMQ.Tracer
4546
4647import DMQ.Diffusion.PeerSelection (policy )
4748import DMQ.NodeToClient.LocalStateQueryClient
49+ import DMQ.Protocol.SigSubmission.Validate
4850import Ouroboros.Network.Diffusion qualified as Diffusion
4951import Ouroboros.Network.PeerSelection.PeerSharing.Codec (decodeRemoteAddress ,
5052 encodeRemoteAddress )
53+ import Ouroboros.Network.SizeInBytes
5154import Ouroboros.Network.Snocket
5255import Ouroboros.Network.TxSubmission.Mempool.Simple qualified as Mempool
5356
@@ -118,56 +121,66 @@ runDMQ commandLineConfig = do
118121 let (psRng, policyRng) = split stdGen
119122
120123 Diffusion. withIOManager \ iocp -> do
121- let localSnocket' = localSnocket iocp
124+ let localSnocket' = localSnocket iocp
125+ mkStakePoolMonitor = connectToCardanoNode tracer localSnocket' snocketPath
122126
123127 withNodeKernel @ StandardCrypto
124128 tracer
125129 dmqConfig
126130 evolutionConfig
127- psRng $ \ nodeKernel -> do
131+ psRng
132+ mkStakePoolMonitor $ \ nodeKernel -> do
128133 dmqDiffusionConfiguration <- mkDiffusionConfiguration dmqConfig nt
129134
130- let stakePoolMonitor = connectToCardanoNode tracer localSnocket' snocketPath nodeKernel
131-
132- withAsync stakePoolMonitor \ aid -> do
133- link aid
134- let dmqNtNApps =
135- ntnApps tracer
136- dmqConfig
137- nodeKernel
138- (dmqCodecs
135+ let sigSize :: Sig StandardCrypto -> SizeInBytes
136+ sigSize _ = 0 -- TODO
137+ mempoolReader = Mempool. getReader sigId sigSize (mempool nodeKernel)
138+ dmqNtNApps =
139+ let ntnMempoolWriter = Mempool. writerAdapter $
140+ Mempool. getWriter sigId
141+ (poolValidationCtx $ stakePools nodeKernel)
142+ (validateSig FailDefault (hashKey . VKey ))
143+ SigDuplicate
144+ (mempool nodeKernel)
145+ in ntnApps tracer
146+ dmqConfig
147+ mempoolReader
148+ ntnMempoolWriter
149+ sigSize
150+ nodeKernel
151+ (dmqCodecs
139152 (encodeRemoteAddress (maxBound @ NodeToNodeVersion ))
140153 (decodeRemoteAddress (maxBound @ NodeToNodeVersion )))
141- dmqLimitsAndTimeouts
142- defaultSigDecisionPolicy
143- dmqNtCApps =
144- let sigSize _ = 0 -- TODO
145- maxMsgs = 1000 -- TODO: make this negotiated in the handshake?
146- mempoolReader = Mempool. getReader sigId sigSize (mempool nodeKernel)
147- mempoolWriter = Mempool. getWriter sigId ( pure () )
148- ( \ _ _ -> Right () :: Either Void ( ) )
149- ( \ _ _ -> pure True )
150- (mempool nodeKernel)
151- in NtC. ntcApps tracer dmqConfig
152- mempoolReader mempoolWriter maxMsgs
153- (NtC. dmqCodecs encodeReject decodeReject)
154- dmqDiffusionArguments =
155- diffusionArguments (if handshakeTracer
156- then WithEventType " Handshake" >$< tracer
157- else nullTracer)
158- (if localHandshakeTracer
159- then WithEventType " Handshake" >$< tracer
160- else nullTracer)
161- dmqDiffusionApplications =
162- diffusionApplications nodeKernel
163- dmqConfig
164- dmqDiffusionConfiguration
165- dmqLimitsAndTimeouts
166- dmqNtNApps
167- dmqNtCApps
168- (policy policyRng)
169-
170- Diffusion. run dmqDiffusionArguments
171- (dmqDiffusionTracers dmqConfig tracer)
172- dmqDiffusionConfiguration
173- dmqDiffusionApplications
154+ dmqLimitsAndTimeouts
155+ defaultSigDecisionPolicy
156+ dmqNtCApps =
157+ let maxMsgs = 1000 -- TODO: make this negotiated in the handshake?
158+ ntcMempoolWriter =
159+ Mempool. getWriter sigId
160+ (poolValidationCtx $ stakePools nodeKernel )
161+ (validateSig FailSoft (hashKey . VKey ))
162+ SigDuplicate
163+ (mempool nodeKernel)
164+ in NtC. ntcApps tracer dmqConfig
165+ mempoolReader ntcMempoolWriter maxMsgs
166+ (NtC. dmqCodecs encodeReject decodeReject)
167+ dmqDiffusionArguments =
168+ diffusionArguments (if handshakeTracer
169+ then WithEventType " Handshake" >$< tracer
170+ else nullTracer)
171+ (if localHandshakeTracer
172+ then WithEventType " Handshake" >$< tracer
173+ else nullTracer)
174+ dmqDiffusionApplications =
175+ diffusionApplications nodeKernel
176+ dmqConfig
177+ dmqDiffusionConfiguration
178+ dmqLimitsAndTimeouts
179+ dmqNtNApps
180+ dmqNtCApps
181+ (policy policyRng)
182+
183+ Diffusion. run dmqDiffusionArguments
184+ (dmqDiffusionTracers dmqConfig tracer)
185+ dmqDiffusionConfiguration
186+ dmqDiffusionApplications
0 commit comments