3
3
{-# LANGUAGE GADTs #-}
4
4
{-# LANGUAGE OverloadedStrings #-}
5
5
{-# LANGUAGE ScopedTypeVariables #-}
6
- {-# LANGUAGE TupleSections #-}
7
- {-# LANGUAGE TypeApplications #-}
8
6
{-# LANGUAGE NoImplicitPrelude #-}
9
7
10
8
module Cardano.DbSync.Api (
@@ -29,20 +27,12 @@ module Cardano.DbSync.Api (
29
27
getSkipTxIn ,
30
28
getPrunes ,
31
29
mkSyncEnvFromConfig ,
32
- verifySnapshotPoint ,
33
30
getInsertOptions ,
34
31
getTrace ,
35
32
getTopLevelConfig ,
36
33
getNetwork ,
37
34
hasLedgerState ,
38
- getLatestPoints ,
39
- getSlotHash ,
40
- getDbLatestBlockInfo ,
41
- getDbTipBlockNo ,
42
- getCurrentTipBlockNo ,
43
35
generateNewEpochEvents ,
44
- logDbState ,
45
- convertToPoint ,
46
36
) where
47
37
48
38
import Cardano.BM.Trace (Trace , logInfo , logWarning )
@@ -56,42 +46,34 @@ import Cardano.DbSync.Config.Shelley
56
46
import Cardano.DbSync.Config.Types
57
47
import Cardano.DbSync.Error
58
48
import Cardano.DbSync.Ledger.Event (LedgerEvent (.. ))
59
- import Cardano.DbSync.Ledger.State (
60
- getHeaderHash ,
61
- hashToAnnotation ,
62
- listKnownSnapshots ,
63
- mkHasLedgerEnv ,
64
- )
65
- import Cardano.DbSync.Ledger.Types (HasLedgerEnv (.. ), LedgerStateFile (.. ), SnapshotPoint (.. ))
49
+ import Cardano.DbSync.Ledger.State (mkHasLedgerEnv )
50
+ import Cardano.DbSync.Ledger.Types (HasLedgerEnv (.. ))
66
51
import Cardano.DbSync.LocalStateQuery
67
52
import Cardano.DbSync.Types
68
53
import Cardano.DbSync.Util
69
54
import Cardano.DbSync.Util.Constraint (dbConstraintNamesExists )
70
55
import qualified Cardano.Ledger.BaseTypes as Ledger
71
56
import qualified Cardano.Ledger.Shelley.Genesis as Shelley
72
57
import Cardano.Prelude
73
- import Cardano.Slotting.Slot (EpochNo (.. ), SlotNo ( .. ), WithOrigin ( .. ) )
58
+ import Cardano.Slotting.Slot (EpochNo (.. ))
74
59
import Control.Concurrent.Class.MonadSTM.Strict (
75
60
newTBQueueIO ,
76
61
newTVarIO ,
77
62
readTVar ,
78
63
readTVarIO ,
79
64
writeTVar ,
80
65
)
81
- import Control.Monad.Trans.Maybe (MaybeT (.. ))
82
66
import qualified Data.Strict.Maybe as Strict
83
67
import Data.Time.Clock (getCurrentTime )
84
68
import Database.Persist.Postgresql (ConnectionString )
85
69
import Database.Persist.Sql (SqlBackend )
86
- import Ouroboros.Consensus.Block.Abstract (BlockProtocol , HeaderHash , Point ( .. ), fromRawHash )
70
+ import Ouroboros.Consensus.Block.Abstract (BlockProtocol )
87
71
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (SystemStart (.. ))
88
72
import Ouroboros.Consensus.Config (SecurityParam (.. ), TopLevelConfig , configSecurityParam )
89
73
import Ouroboros.Consensus.Node.ProtocolInfo (ProtocolInfo (pInfoConfig ))
90
74
import qualified Ouroboros.Consensus.Node.ProtocolInfo as Consensus
91
75
import Ouroboros.Consensus.Protocol.Abstract (ConsensusProtocol )
92
- import Ouroboros.Network.Block (BlockNo (.. ), Point (.. ))
93
76
import Ouroboros.Network.Magic (NetworkMagic (.. ))
94
- import qualified Ouroboros.Network.Point as Point
95
77
96
78
setConsistentLevel :: SyncEnv -> ConsistentLevel -> IO ()
97
79
setConsistentLevel env cst = do
@@ -243,60 +225,12 @@ getNetwork sEnv =
243
225
getInsertOptions :: SyncEnv -> InsertOptions
244
226
getInsertOptions = soptInsertOptions . envOptions
245
227
246
- getSlotHash :: SqlBackend -> SlotNo -> IO [(SlotNo , ByteString )]
247
- getSlotHash backend = DB. runDbIohkNoLogging backend . DB. querySlotHash
248
-
249
228
hasLedgerState :: SyncEnv -> Bool
250
229
hasLedgerState syncEnv =
251
230
case envLedgerEnv syncEnv of
252
231
HasLedger _ -> True
253
232
NoLedger _ -> False
254
233
255
- getDbLatestBlockInfo :: SqlBackend -> IO (Maybe TipInfo )
256
- getDbLatestBlockInfo backend = do
257
- runMaybeT $ do
258
- block <- MaybeT $ DB. runDbIohkNoLogging backend DB. queryLatestBlock
259
- -- The EpochNo, SlotNo and BlockNo can only be zero for the Byron
260
- -- era, but we need to make the types match, hence `fromMaybe`.
261
- pure $
262
- TipInfo
263
- { bHash = DB. blockHash block
264
- , bEpochNo = EpochNo . fromMaybe 0 $ DB. blockEpochNo block
265
- , bSlotNo = SlotNo . fromMaybe 0 $ DB. blockSlotNo block
266
- , bBlockNo = BlockNo . fromMaybe 0 $ DB. blockBlockNo block
267
- }
268
-
269
- getDbTipBlockNo :: SyncEnv -> IO (Point. WithOrigin BlockNo )
270
- getDbTipBlockNo env = do
271
- mblk <- getDbLatestBlockInfo (envBackend env)
272
- pure $ maybe Point. Origin (Point. At . bBlockNo) mblk
273
-
274
- logDbState :: SyncEnv -> IO ()
275
- logDbState env = do
276
- mblk <- getDbLatestBlockInfo (envBackend env)
277
- case mblk of
278
- Nothing -> logInfo tracer " Database is empty"
279
- Just tip -> logInfo tracer $ mconcat [" Database tip is at " , showTip tip]
280
- where
281
- showTip :: TipInfo -> Text
282
- showTip tipInfo =
283
- mconcat
284
- [ " slot "
285
- , textShow (unSlotNo $ bSlotNo tipInfo)
286
- , " , block "
287
- , textShow (unBlockNo $ bBlockNo tipInfo)
288
- ]
289
-
290
- tracer :: Trace IO Text
291
- tracer = getTrace env
292
-
293
- getCurrentTipBlockNo :: SyncEnv -> IO (WithOrigin BlockNo )
294
- getCurrentTipBlockNo env = do
295
- maybeTip <- getDbLatestBlockInfo (envBackend env)
296
- case maybeTip of
297
- Just tip -> pure $ At (bBlockNo tip)
298
- Nothing -> pure Origin
299
-
300
234
mkSyncEnv ::
301
235
Trace IO Text ->
302
236
SqlBackend ->
@@ -432,52 +366,6 @@ mkSyncEnvFromConfig trce backend connectionString syncOptions genCfg syncNodeCon
432
366
syncNodeParams
433
367
runMigrationFnc
434
368
435
- -- | 'True' is for in memory points and 'False' for on disk
436
- getLatestPoints :: SyncEnv -> IO [(CardanoPoint , Bool )]
437
- getLatestPoints env = do
438
- case envLedgerEnv env of
439
- HasLedger hasLedgerEnv -> do
440
- snapshotPoints <- listKnownSnapshots hasLedgerEnv
441
- verifySnapshotPoint env snapshotPoints
442
- NoLedger _ -> do
443
- -- Brings the 5 latest.
444
- lastPoints <- DB. runDbIohkNoLogging (envBackend env) DB. queryLatestPoints
445
- pure $ mapMaybe convert lastPoints
446
- where
447
- convert (Nothing , _) = Nothing
448
- convert (Just slot, bs) = convertToDiskPoint (SlotNo slot) bs
449
-
450
- verifySnapshotPoint :: SyncEnv -> [SnapshotPoint ] -> IO [(CardanoPoint , Bool )]
451
- verifySnapshotPoint env snapPoints =
452
- catMaybes <$> mapM validLedgerFileToPoint snapPoints
453
- where
454
- validLedgerFileToPoint :: SnapshotPoint -> IO (Maybe (CardanoPoint , Bool ))
455
- validLedgerFileToPoint (OnDisk lsf) = do
456
- hashes <- getSlotHash (envBackend env) (lsfSlotNo lsf)
457
- let valid = find (\ (_, h) -> lsfHash lsf == hashToAnnotation h) hashes
458
- case valid of
459
- Just (slot, hash) | slot == lsfSlotNo lsf -> pure $ convertToDiskPoint slot hash
460
- _ -> pure Nothing
461
- validLedgerFileToPoint (InMemory pnt) = do
462
- case pnt of
463
- GenesisPoint -> pure Nothing
464
- BlockPoint slotNo hsh -> do
465
- hashes <- getSlotHash (envBackend env) slotNo
466
- let valid = find (\ (_, dbHash) -> getHeaderHash hsh == dbHash) hashes
467
- case valid of
468
- Just (dbSlotNo, _) | slotNo == dbSlotNo -> pure $ Just (pnt, True )
469
- _ -> pure Nothing
470
-
471
- convertToDiskPoint :: SlotNo -> ByteString -> Maybe (CardanoPoint , Bool )
472
- convertToDiskPoint slot hashBlob = (,False ) <$> convertToPoint slot hashBlob
473
-
474
- convertToPoint :: SlotNo -> ByteString -> Maybe CardanoPoint
475
- convertToPoint slot hashBlob =
476
- Point . Point. block slot <$> convertHashBlob hashBlob
477
- where
478
- convertHashBlob :: ByteString -> Maybe (HeaderHash CardanoBlock )
479
- convertHashBlob = Just . fromRawHash (Proxy @ CardanoBlock )
480
-
481
369
getSecurityParam :: SyncEnv -> Word64
482
370
getSecurityParam syncEnv =
483
371
case envLedgerEnv syncEnv of
0 commit comments