@@ -16,19 +16,15 @@ import qualified Cardano.Db as DB
16
16
import Cardano.DbSync.Api
17
17
import Cardano.DbSync.Api.Ledger
18
18
import Cardano.DbSync.Api.Types (ConsistentLevel (.. ), InsertOptions (.. ), LedgerEnv (.. ), SyncEnv (.. ), SyncOptions (.. ))
19
- import Cardano.DbSync.Cache.Types (textShowStats )
20
19
import Cardano.DbSync.Epoch (epochHandler )
21
20
import Cardano.DbSync.Era.Byron.Insert (insertByronBlock )
22
- import Cardano.DbSync.Era.Cardano.Insert (insertEpochSyncTime )
23
- import Cardano.DbSync.Era.Shelley.Adjust (adjustEpochRewards )
24
21
import qualified Cardano.DbSync.Era.Shelley.Generic as Generic
25
- import Cardano.DbSync.Era.Shelley.Insert ( insertShelleyBlock )
26
- import Cardano.DbSync.Era.Shelley.Insert.Certificate ( mkAdaPots )
27
- import Cardano.DbSync.Era.Shelley .Insert.Epoch ( insertInstantRewards , insertPoolDepositRefunds , insertRewards )
28
- import Cardano.DbSync.Era.Shelley.Validate ( validateEpochRewards )
22
+ import Cardano.DbSync.Era.Universal.Block ( insertBlockUniversal )
23
+ import Cardano.DbSync.Era.Universal.Epoch ( hasEpochStartEvent , hasNewEpochEvent )
24
+ import Cardano.DbSync.Era.Universal .Insert.Certificate ( mkAdaPots )
25
+ import Cardano.DbSync.Era.Universal.Insert.LedgerEvent ( insertBlockLedgerEvents )
29
26
import Cardano.DbSync.Error
30
27
import Cardano.DbSync.Fix.EpochStake
31
- import Cardano.DbSync.Ledger.Event (LedgerEvent (.. ))
32
28
import Cardano.DbSync.Ledger.State (applyBlockAndSnapshot , defaultApplyResult )
33
29
import Cardano.DbSync.Ledger.Types (ApplyResult (.. ))
34
30
import Cardano.DbSync.LocalStateQuery
@@ -38,17 +34,15 @@ import Cardano.DbSync.Util
38
34
import Cardano.DbSync.Util.Constraint (addConstraintsIfNotExist )
39
35
import qualified Cardano.Ledger.Alonzo.Scripts as Ledger
40
36
import Cardano.Ledger.Shelley.AdaPots as Shelley
37
+ import Cardano.Node.Configuration.Logging (Trace )
41
38
import Cardano.Prelude
42
39
import Cardano.Slotting.Slot (EpochNo (.. ), SlotNo )
43
40
import Control.Monad.Logger (LoggingT )
44
- import Control.Monad.Trans.Control (MonadBaseControl )
45
41
import Control.Monad.Trans.Except.Extra (newExceptT )
46
42
import qualified Data.ByteString.Short as SBS
47
- import qualified Data.Map.Strict as Map
48
43
import qualified Data.Set as Set
49
44
import qualified Data.Strict.Maybe as Strict
50
45
import Database.Persist.SqlBackend.Internal
51
- import Database.Persist.SqlBackend.Internal.StatementCache
52
46
import Ouroboros.Consensus.Cardano.Block (HardForkBlock (.. ))
53
47
import qualified Ouroboros.Consensus.HardFork.Combinator as Consensus
54
48
import Ouroboros.Network.Block (blockHash , blockNo , getHeaderFields , headerFieldBlockNo , unBlockNo )
@@ -60,15 +54,16 @@ insertListBlocks ::
60
54
insertListBlocks synEnv blocks = do
61
55
DB. runDbIohkLogging (envBackend synEnv) tracer
62
56
. runExceptT
63
- $ traverse_ (applyAndInsertBlockMaybe synEnv) blocks
57
+ $ traverse_ (applyAndInsertBlockMaybe synEnv tracer ) blocks
64
58
where
65
59
tracer = getTrace synEnv
66
60
67
61
applyAndInsertBlockMaybe ::
68
62
SyncEnv ->
63
+ Trace IO Text ->
69
64
CardanoBlock ->
70
65
ExceptT SyncNodeError (ReaderT SqlBackend (LoggingT IO )) ()
71
- applyAndInsertBlockMaybe syncEnv cblk = do
66
+ applyAndInsertBlockMaybe syncEnv tracer cblk = do
72
67
bl <- liftIO $ isConsistent syncEnv
73
68
(! applyRes, ! tookSnapshot) <- liftIO (mkApplyResult bl)
74
69
if bl
@@ -101,8 +96,6 @@ applyAndInsertBlockMaybe syncEnv cblk = do
101
96
liftIO $ logInfo tracer $ " Reached " <> textShow epochNo
102
97
_ -> pure ()
103
98
where
104
- tracer = getTrace syncEnv
105
-
106
99
mkApplyResult :: Bool -> IO (ApplyResult , Bool )
107
100
mkApplyResult isCons = do
108
101
case envLedgerEnv syncEnv of
@@ -136,12 +129,12 @@ insertBlock syncEnv cblk applyRes firstAfterRollback tookSnapshot = do
136
129
let ! details = apSlotDetails applyResult
137
130
let ! withinTwoMin = isWithinTwoMin details
138
131
let ! withinHalfHour = isWithinHalfHour details
139
- insertLedgerEvents syncEnv (sdEpochNo details) (apEvents applyResult)
132
+ insertBlockLedgerEvents syncEnv (sdEpochNo details) (apEvents applyResult)
140
133
let isNewEpochEvent = hasNewEpochEvent (apEvents applyResult)
141
134
let isStartEventOrRollback = hasEpochStartEvent (apEvents applyResult) || firstAfterRollback
142
135
let isMember poolId = Set. member poolId (apPoolsRegistered applyResult)
143
- let insertShelley blk =
144
- insertShelleyBlock
136
+ let insertBlockUniversal' blk =
137
+ insertBlockUniversal
145
138
syncEnv
146
139
isStartEventOrRollback
147
140
withinTwoMin
@@ -159,27 +152,27 @@ insertBlock syncEnv cblk applyRes firstAfterRollback tookSnapshot = do
159
152
insertByronBlock syncEnv isStartEventOrRollback blk details
160
153
BlockShelley blk ->
161
154
newExceptT $
162
- insertShelley $
155
+ insertBlockUniversal' $
163
156
Generic. fromShelleyBlock blk
164
157
BlockAllegra blk ->
165
158
newExceptT $
166
- insertShelley $
159
+ insertBlockUniversal' $
167
160
Generic. fromAllegraBlock blk
168
161
BlockMary blk ->
169
162
newExceptT $
170
- insertShelley $
163
+ insertBlockUniversal' $
171
164
Generic. fromMaryBlock blk
172
165
BlockAlonzo blk ->
173
166
newExceptT $
174
- insertShelley $
167
+ insertBlockUniversal' $
175
168
Generic. fromAlonzoBlock (ioPlutusExtra iopts) (getPrices applyResult) blk
176
169
BlockBabbage blk ->
177
170
newExceptT $
178
- insertShelley $
171
+ insertBlockUniversal' $
179
172
Generic. fromBabbageBlock (ioPlutusExtra iopts) (getPrices applyResult) blk
180
173
BlockConway blk ->
181
174
newExceptT $
182
- insertShelley $
175
+ insertBlockUniversal' $
183
176
Generic. fromConwayBlock (ioPlutusExtra iopts) (getPrices applyResult) blk
184
177
-- update the epoch
185
178
updateEpoch details isNewEpochEvent
@@ -232,90 +225,3 @@ insertBlock syncEnv cblk applyRes firstAfterRollback tookSnapshot = do
232
225
isWithinHalfHour sd = isSyncedWithinSeconds sd 1800 == SyncFollowing
233
226
234
227
blkNo = headerFieldBlockNo $ getHeaderFields cblk
235
-
236
- -- -------------------------------------------------------------------------------------------------
237
-
238
- insertLedgerEvents ::
239
- (MonadBaseControl IO m , MonadIO m ) =>
240
- SyncEnv ->
241
- EpochNo ->
242
- [LedgerEvent ] ->
243
- ExceptT SyncNodeError (ReaderT SqlBackend m ) ()
244
- insertLedgerEvents syncEnv currentEpochNo@ (EpochNo curEpoch) =
245
- mapM_ handler
246
- where
247
- tracer = getTrace syncEnv
248
- cache = envCache syncEnv
249
- ntw = getNetwork syncEnv
250
-
251
- subFromCurrentEpoch :: Word64 -> EpochNo
252
- subFromCurrentEpoch m =
253
- if unEpochNo currentEpochNo >= m
254
- then EpochNo $ unEpochNo currentEpochNo - m
255
- else EpochNo 0
256
-
257
- toSyncState :: SyncState -> DB. SyncState
258
- toSyncState SyncLagging = DB. SyncLagging
259
- toSyncState SyncFollowing = DB. SyncFollowing
260
-
261
- handler ::
262
- (MonadBaseControl IO m , MonadIO m ) =>
263
- LedgerEvent ->
264
- ExceptT SyncNodeError (ReaderT SqlBackend m ) ()
265
- handler ev =
266
- case ev of
267
- LedgerNewEpoch en ss -> do
268
- lift $
269
- insertEpochSyncTime en (toSyncState ss) (envEpochSyncTime syncEnv)
270
- sqlBackend <- lift ask
271
- persistantCacheSize <- liftIO $ statementCacheSize $ connStmtMap sqlBackend
272
- liftIO . logInfo tracer $ " Persistant SQL Statement Cache size is " <> textShow persistantCacheSize
273
- stats <- liftIO $ textShowStats cache
274
- liftIO . logInfo tracer $ stats
275
- liftIO . logInfo tracer $ " Starting epoch " <> textShow (unEpochNo en)
276
- LedgerStartAtEpoch en ->
277
- -- This is different from the previous case in that the db-sync started
278
- -- in this epoch, for example after a restart, instead of after an epoch boundary.
279
- liftIO . logInfo tracer $ " Starting at epoch " <> textShow (unEpochNo en)
280
- LedgerDeltaRewards _e rwd -> do
281
- let rewards = Map. toList $ Generic. unRewards rwd
282
- insertRewards syncEnv ntw (subFromCurrentEpoch 2 ) currentEpochNo cache (Map. toList $ Generic. unRewards rwd)
283
- -- This event is only created when it's not empty, so we don't need to check for null here.
284
- liftIO . logInfo tracer $ " Inserted " <> show (length rewards) <> " Delta rewards"
285
- LedgerIncrementalRewards _ rwd -> do
286
- let rewards = Map. toList $ Generic. unRewards rwd
287
- insertRewards syncEnv ntw (subFromCurrentEpoch 1 ) (EpochNo $ curEpoch + 1 ) cache rewards
288
- LedgerRestrainedRewards e rwd creds ->
289
- lift $ adjustEpochRewards tracer ntw cache e rwd creds
290
- LedgerTotalRewards _e rwd ->
291
- lift $ validateEpochRewards tracer ntw (subFromCurrentEpoch 2 ) currentEpochNo rwd
292
- LedgerAdaPots _ ->
293
- pure () -- These are handled separately by insertBlock
294
- LedgerMirDist rwd -> do
295
- unless (Map. null rwd) $ do
296
- let rewards = Map. toList rwd
297
- insertInstantRewards ntw (subFromCurrentEpoch 1 ) currentEpochNo cache rewards
298
- liftIO . logInfo tracer $ " Inserted " <> show (length rewards) <> " Mir rewards"
299
- LedgerPoolReap en drs ->
300
- unless (Map. null $ Generic. unRewards drs) $ do
301
- insertPoolDepositRefunds syncEnv en drs
302
- LedgerDeposits {} -> pure ()
303
-
304
- hasEpochStartEvent :: [LedgerEvent ] -> Bool
305
- hasEpochStartEvent = any isNewEpoch
306
- where
307
- isNewEpoch :: LedgerEvent -> Bool
308
- isNewEpoch le =
309
- case le of
310
- LedgerNewEpoch {} -> True
311
- LedgerStartAtEpoch {} -> True
312
- _otherwise -> False
313
-
314
- hasNewEpochEvent :: [LedgerEvent ] -> Bool
315
- hasNewEpochEvent = any isNewEpoch
316
- where
317
- isNewEpoch :: LedgerEvent -> Bool
318
- isNewEpoch le =
319
- case le of
320
- LedgerNewEpoch {} -> True
321
- _otherwise -> False
0 commit comments