@@ -3,14 +3,15 @@ module Hydra.Chain.SyncedStatus where
33import Hydra.Prelude
44
55import Control.Concurrent.Class.MonadSTM (writeTVar )
6- import Hydra.Cardano.Api (ChainPoint (.. ))
7- import Hydra.Tx.ContestationPeriod ( ContestationPeriod , toNominalDiffTime )
6+ import Hydra.Cardano.Api (ChainPoint (.. ), SlotNo ( SlotNo ), chainPointToSlotNo )
7+ import Hydra.Chain.ChainState ( ChainSlot ( ChainSlot ) )
88
99data SyncedStatus
1010 = SyncedStatus
1111 { status :: Bool
12- , diff :: Maybe NominalDiffTime
12+ , diff :: Maybe ChainSlot
1313 , point :: ChainPoint
14+ , tip :: ChainPoint
1415 }
1516 deriving stock (Eq , Show , Generic )
1617 deriving anyclass (ToJSON , FromJSON )
@@ -19,20 +20,24 @@ instance Arbitrary SyncedStatus where
1920 arbitrary = genericArbitrary
2021 shrink = genericShrink
2122
22- unSynced :: SyncedStatus
23- unSynced = SyncedStatus {status = False , diff = Nothing , point = ChainPointAtGenesis }
23+ unSynced :: ChainPoint -> SyncedStatus
24+ unSynced tip = SyncedStatus {status = False , diff = Nothing , point = ChainPointAtGenesis , tip }
2425
2526updateSyncStatus ::
26- ( MonadSTM m , MonadTime m ) =>
27+ MonadSTM m =>
2728 TVar m SyncedStatus ->
28- ContestationPeriod ->
29- UTCTime ->
29+ ChainPoint ->
3030 ChainPoint ->
3131 m ()
32- updateSyncStatus syncedStatus contestationPeriod slotUTCTime point = do
33- -- TODO! replace by: slotToUTCTime tipSlot
34- now <- getCurrentTime
35- let diff = now `diffUTCTime` slotUTCTime
36- synced = diff < toNominalDiffTime contestationPeriod
32+ updateSyncStatus syncedStatus tip point = do
33+ let diff = chainSlotFromPoint tip - chainSlotFromPoint point
34+ synced = tip == point
3735 atomically $
38- writeTVar syncedStatus SyncedStatus {status = synced, diff = Just diff, point}
36+ writeTVar syncedStatus SyncedStatus {status = synced, diff = Just diff, point, tip}
37+ where
38+ -- TODO! DRY
39+ chainSlotFromPoint :: ChainPoint -> ChainSlot
40+ chainSlotFromPoint p =
41+ case chainPointToSlotNo p of
42+ Nothing -> ChainSlot 0
43+ Just (SlotNo s) -> ChainSlot $ fromIntegral s
0 commit comments