Source file init_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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
let prepare_first_block ctxt ~typecheck ~level ~timestamp ~fitness =
Raw_context.prepare_first_block
~level ~timestamp ~fitness ctxt >>=? fun (previous_protocol, ctxt) ->
match previous_protocol with
| Genesis param ->
Commitment_storage.init ctxt param.commitments >>=? fun ctxt ->
Roll_storage.init ctxt >>=? fun ctxt ->
Seed_storage.init ctxt >>=? fun ctxt ->
Contract_storage.init ctxt >>=? fun ctxt ->
Bootstrap_storage.init ctxt
~typecheck
?ramp_up_cycles:param.security_deposit_ramp_up_cycles
?no_reward_cycles:param.no_reward_cycles
param.bootstrap_accounts
param.bootstrap_contracts >>=? fun ctxt ->
Roll_storage.init_first_cycles ctxt >>=? fun ctxt ->
Vote_storage.init ctxt >>=? fun ctxt ->
Storage.Last_block_priority.init ctxt 0 >>=? fun ctxt ->
return ctxt
| Alpha_002 ->
Storage.Delegates.fold ctxt ~init:(Ok ctxt) ~f:begin fun delegate ctxt ->
Lwt.return ctxt >>=? fun ctxt ->
Storage.Contract.Inactive_delegate.mem ctxt
(Contract_repr.implicit_contract delegate) >>= fun inactive ->
if inactive then
return ctxt
else
Storage.Roll.Delegate_roll_list.get_option ctxt delegate >>=? function
| None ->
return ctxt
| Some _ ->
Storage.Active_delegates_with_rolls.add ctxt delegate >>= fun ctxt ->
return ctxt
end >>=? fun ctxt ->
let { Level_repr.cycle = current_cycle } = Raw_context.current_level ctxt in
let { Constants_repr.preserved_cycles } = Raw_context.constants ctxt in
let first_cycle =
match Cycle_repr.sub current_cycle preserved_cycles with
| None -> Cycle_repr.root
| Some first_cycle -> first_cycle in
Storage.Delegates.fold ctxt ~init:(Ok ctxt) ~f:begin fun delegate ctxt ->
Lwt.return ctxt >>=? fun ctxt ->
let rec loop ctxt cycle =
if Cycle_repr.(cycle > current_cycle) then
return ctxt
else
Delegate_storage.has_frozen_balance ctxt delegate cycle >>=? fun has_frozen_balance ->
begin
if has_frozen_balance then
Storage.Delegates_with_frozen_balance.add (ctxt, cycle) delegate
else
Lwt.return ctxt
end >>= fun ctxt ->
loop ctxt (Cycle_repr.succ cycle) in
loop ctxt first_cycle
end >>=? fun ctxt ->
return ctxt
let prepare ctxt ~level ~timestamp ~fitness =
Raw_context.prepare ~level ~timestamp ~fitness ctxt