@@ -35,6 +35,7 @@ module Cardano.DbSync.Ledger.State (
3535 getStakeSlice ,
3636 getSliceMeta ,
3737 findProposedCommittee ,
38+ trimLedgerState ,
3839) where
3940
4041import Cardano.BM.Trace (Trace , logInfo , logWarning )
@@ -89,6 +90,7 @@ import qualified Data.Set as Set
8990import qualified Data.Strict.Maybe as Strict
9091import qualified Data.Text as Text
9192import Data.Time.Clock (UTCTime , diffUTCTime , getCurrentTime )
93+ import GHC.Conc (unsafeIOToSTM )
9294import GHC.IO.Exception (userError )
9395import Lens.Micro ((%~) , (^.) , (^?) )
9496import Ouroboros.Consensus.Block (
@@ -132,7 +134,7 @@ import qualified Ouroboros.Network.Point as Point
132134import System.Directory (doesFileExist , listDirectory , removeFile )
133135import System.FilePath (dropExtension , takeExtension , (</>) )
134136import System.Mem (performMajorGC )
135- import Prelude (String , id )
137+ import Prelude (String , id , undefined )
136138
137139-- Note: The decision on whether a ledger-state is written to disk is based on the block number
138140-- rather than the slot number because while the block number is fully populated (for every block
@@ -217,6 +219,7 @@ readStateUnsafe env = do
217219applyBlockAndSnapshot :: HasLedgerEnv -> CardanoBlock -> Bool -> IO (ApplyResult , Bool )
218220applyBlockAndSnapshot ledgerEnv blk isCons = do
219221 (oldState, appResult) <- applyBlock ledgerEnv blk
222+
220223 tookSnapshot <- storeSnapshotAndCleanupMaybe ledgerEnv oldState appResult (blockNo blk) isCons (isSyncedWithinSeconds (apSlotDetails appResult) 600 )
221224 pure (appResult, tookSnapshot)
222225
@@ -233,10 +236,12 @@ applyBlock env blk = do
233236 let ledgerEventsFull = mapMaybe (convertAuxLedgerEvent (leHasRewards env)) (lrEvents result)
234237 let (ledgerEvents, deposits) = splitDeposits ledgerEventsFull
235238 let ! newLedgerState = finaliseDrepDistr (lrResult result)
239+
236240 ! details <- getSlotDetails env (ledgerState newLedgerState) time (cardanoBlockSlotNo blk)
237241 ! newEpoch <- fromEitherSTM $ mkOnNewEpoch (clsState oldState) newLedgerState (findAdaPots ledgerEvents)
238242 let ! newEpochBlockNo = applyToEpochBlockNo (isJust $ blockIsEBB blk) (isJust newEpoch) (clsEpochBlockNo oldState)
239243 let ! newState = CardanoLedgerState newLedgerState newEpochBlockNo
244+ let ! newState' = maybe newState (trimOnNewEpoch newState) newEpoch
240245 let ! ledgerDB' = pushLedgerDB ledgerDB newState
241246 writeTVar (leStateVar env) (Strict. Just ledgerDB')
242247 let ! appResult =
@@ -299,6 +304,9 @@ applyBlock env blk = do
299304 finaliseDrepDistr ledger =
300305 ledger & newEpochStateT %~ forceDRepPulsingState @ StandardConway
301306
307+ trimOnNewEpoch :: CardanoLedgerState -> Generic. NewEpoch -> CardanoLedgerState
308+ trimOnNewEpoch ls ! _ = trimLedgerState ls
309+
302310getGovState :: ExtLedgerState CardanoBlock -> Maybe (ConwayGovState StandardConway )
303311getGovState ls = case ledgerState ls of
304312 LedgerStateConway cls ->
@@ -889,3 +897,6 @@ findProposedCommittee gaId cgs = do
889897 UpdateCommittee _ toRemove toAdd q -> Right $ Ledger. SJust $ updatedCommittee toRemove toAdd q scommittee
890898 _ -> Left " Unexpected gov action." -- Should never happen since the accumulator only includes UpdateCommittee
891899 fromNothing err = maybe (Left err) Right
900+
901+ trimLedgerState :: CardanoLedgerState -> CardanoLedgerState
902+ trimLedgerState = undefined
0 commit comments