Source file dal_slot_storage.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
let find ctxt level = Storage.Dal.Slot_headers.find ctxt level
let finalize_current_slots ctxt =
let current_level = Raw_context.current_level ctxt in
let slots = Raw_context.Dal.candidates ctxt in
match slots with
| [] -> Lwt.return ctxt
| _ :: _ -> Storage.Dal.Slot_headers.add ctxt current_level.level slots
let compute_available_slots ctxt slots =
let fold_available_slots available_slots slot =
if Raw_context.Dal.is_slot_available ctxt slot.Dal_slot_repr.index then
Dal_endorsement_repr.commit available_slots slot.Dal_slot_repr.index
else available_slots
in
List.fold_left fold_available_slots Dal_endorsement_repr.empty slots
let finalize_pending_slots ctxt =
let current_level = Raw_context.current_level ctxt in
let Constants_parametric_repr.{dal; _} = Raw_context.constants ctxt in
match Raw_level_repr.(sub current_level.level dal.endorsement_lag) with
| None -> return (ctxt, Dal_endorsement_repr.empty)
| Some level_endorsed -> (
Storage.Dal.Slot_headers.find ctxt level_endorsed >>=? function
| None -> return (ctxt, Dal_endorsement_repr.empty)
| Some slots ->
let available_slots = compute_available_slots ctxt slots in
Storage.Dal.Slot_headers.remove ctxt level_endorsed >>= fun ctxt ->
return (ctxt, available_slots))