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