@@ -35,52 +35,64 @@ type Clock struct {
35
35
// NewProvider creates a new Clock provider with the given options.
36
36
func NewProvider (opts ... options.Option [Clock ]) module.Provider [* engine.Engine , clock.Clock ] {
37
37
return module .Provide (func (e * engine.Engine ) clock.Clock {
38
- return options .Apply (& Clock {
39
- Module : e .NewSubModule ("Clock" ),
40
- acceptedTime : NewRelativeTime (),
41
- confirmedTime : NewRelativeTime (),
42
- workerPool : e .Workers .CreatePool ("Clock" , workerpool .WithWorkerCount (1 ), workerpool .WithCancelPendingTasksOnShutdown (true ), workerpool .WithPanicOnSubmitAfterShutdown (true )),
43
- }, opts , func (c * Clock ) {
44
- e .ConstructedEvent ().OnTrigger (func () {
45
- latestCommitmentIndex := e .Storage .Settings ().LatestCommitment ().Slot ()
46
- c .acceptedTime .Set (e .APIForSlot (latestCommitmentIndex ).TimeProvider ().SlotEndTime (latestCommitmentIndex ))
47
-
48
- latestFinalizedSlotIndex := e .Storage .Settings ().LatestFinalizedSlot ()
49
- c .confirmedTime .Set (e .APIForSlot (latestFinalizedSlotIndex ).TimeProvider ().SlotEndTime (latestFinalizedSlotIndex ))
50
-
51
- e .Events .Clock .AcceptedTimeUpdated .LinkTo (c .acceptedTime .OnUpdated )
52
- e .Events .Clock .ConfirmedTimeUpdated .LinkTo (c .confirmedTime .OnUpdated )
53
-
54
- asyncOpt := event .WithWorkerPool (c .workerPool )
55
- c .ShutdownEvent ().OnTrigger (lo .Batch (
56
- e .Events .BlockGadget .BlockAccepted .Hook (func (block * blocks.Block ) {
57
- c .acceptedTime .Advance (block .IssuingTime ())
58
- }, asyncOpt ).Unhook ,
59
-
60
- e .Events .BlockGadget .BlockConfirmed .Hook (func (block * blocks.Block ) {
61
- c .confirmedTime .Advance (block .IssuingTime ())
62
- }, asyncOpt ).Unhook ,
63
-
64
- e .Events .SlotGadget .SlotFinalized .Hook (func (slot iotago.SlotIndex ) {
65
- timeProvider := e .APIForSlot (slot ).TimeProvider ()
66
- slotEndTime := timeProvider .SlotEndTime (slot )
67
-
68
- c .acceptedTime .Advance (slotEndTime )
69
- c .confirmedTime .Advance (slotEndTime )
70
- }, asyncOpt ).Unhook ,
71
-
72
- func () {
73
- c .workerPool .Shutdown ()
74
-
75
- c .StoppedEvent ().Trigger ()
76
- },
77
- ))
78
-
79
- c .InitializedEvent ().Trigger ()
38
+ c := New (e .NewSubModule ("Clock" ), e , opts ... )
39
+
40
+ e .ConstructedEvent ().OnTrigger (func () {
41
+ latestCommitmentIndex := e .Storage .Settings ().LatestCommitment ().Slot ()
42
+ c .acceptedTime .Set (e .APIForSlot (latestCommitmentIndex ).TimeProvider ().SlotEndTime (latestCommitmentIndex ))
43
+
44
+ latestFinalizedSlotIndex := e .Storage .Settings ().LatestFinalizedSlot ()
45
+ c .confirmedTime .Set (e .APIForSlot (latestFinalizedSlotIndex ).TimeProvider ().SlotEndTime (latestFinalizedSlotIndex ))
46
+
47
+ e .Events .Clock .AcceptedTimeUpdated .LinkTo (c .acceptedTime .OnUpdated )
48
+ e .Events .Clock .ConfirmedTimeUpdated .LinkTo (c .confirmedTime .OnUpdated )
49
+
50
+ asyncOpt := event .WithWorkerPool (c .workerPool )
51
+
52
+ unhook := lo .Batch (
53
+ e .Events .BlockGadget .BlockAccepted .Hook (func (block * blocks.Block ) {
54
+ c .acceptedTime .Advance (block .IssuingTime ())
55
+ }, asyncOpt ).Unhook ,
56
+
57
+ e .Events .BlockGadget .BlockConfirmed .Hook (func (block * blocks.Block ) {
58
+ c .confirmedTime .Advance (block .IssuingTime ())
59
+ }, asyncOpt ).Unhook ,
60
+
61
+ e .Events .SlotGadget .SlotFinalized .Hook (func (slot iotago.SlotIndex ) {
62
+ timeProvider := e .APIForSlot (slot ).TimeProvider ()
63
+ slotEndTime := timeProvider .SlotEndTime (slot )
64
+
65
+ c .acceptedTime .Advance (slotEndTime )
66
+ c .confirmedTime .Advance (slotEndTime )
67
+ }, asyncOpt ).Unhook ,
68
+ )
69
+
70
+ c .ShutdownEvent ().OnTrigger (func () {
71
+ unhook ()
72
+ c .workerPool .Shutdown ()
73
+
74
+ c .StoppedEvent ().Trigger ()
80
75
})
81
76
82
- c .ConstructedEvent ().Trigger ()
77
+ c .InitializedEvent ().Trigger ()
78
+ })
79
+
80
+ return c
81
+ })
82
+ }
83
+
84
+ func New (subModule module.Module , engine * engine.Engine , opts ... options.Option [Clock ]) * Clock {
85
+ return options .Apply (& Clock {
86
+ Module : subModule ,
87
+ acceptedTime : NewRelativeTime (),
88
+ confirmedTime : NewRelativeTime (),
89
+ workerPool : engine .Workers .CreatePool ("Clock" , workerpool .WithWorkerCount (1 ), workerpool .WithCancelPendingTasksOnShutdown (true ), workerpool .WithPanicOnSubmitAfterShutdown (true )),
90
+ }, opts , func (c * Clock ) {
91
+ c .ShutdownEvent ().OnTrigger (func () {
92
+ c .workerPool .Shutdown ()
83
93
})
94
+
95
+ c .ConstructedEvent ().Trigger ()
84
96
})
85
97
}
86
98
0 commit comments