Source file delegate_staking_parameters.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
let of_delegate ctxt delegate =
let open Lwt_result_syntax in
let* t =
Storage.Contract.Staking_parameters.find
ctxt
(Contract_repr.Implicit delegate)
in
match t with
| None -> return Staking_parameters_repr.default
| Some t -> return t
let pending_updates ctxt delegate =
let contract = Contract_repr.Implicit delegate in
let preserved_cycles = Constants_storage.preserved_cycles ctxt in
let current_cycle = (Raw_context.current_level ctxt).cycle in
let to_cycle = Cycle_repr.add current_cycle (preserved_cycles + 1) in
List.filter_map_es
(fun cycle ->
let open Lwt_result_syntax in
let+ param_opt =
Storage.Pending_staking_parameters.find (ctxt, cycle) contract
in
Option.map (fun param -> (cycle, param)) param_opt)
Cycle_repr.(current_cycle ---> to_cycle)
let register_update ctxt delegate t =
let open Lwt_result_syntax in
let update_cycle =
let current_level = Raw_context.current_level ctxt in
let preserved_cycles = Constants_storage.preserved_cycles ctxt in
Cycle_repr.add current_level.cycle (preserved_cycles + 1)
in
let*! ctxt =
Storage.Pending_staking_parameters.add
(ctxt, update_cycle)
(Contract_repr.Implicit delegate)
t
in
return ctxt
let activate ctxt ~new_cycle =
let open Lwt_syntax in
let* ctxt =
Storage.Pending_staking_parameters.fold
(ctxt, new_cycle)
~order:`Undefined
~init:ctxt
~f:(fun delegate t ctxt ->
Storage.Contract.Staking_parameters.add ctxt delegate t)
in
Storage.Pending_staking_parameters.clear (ctxt, new_cycle)