Alpha/Baker: load protocol constants lazily
This avoids the baker refusing to start when the protocol alpha is not yet activated.
This commit is contained in:
parent
0fb25db95b
commit
8b73e812ac
@ -15,8 +15,12 @@ include Logging.Make(struct let name = "client.baking" end)
|
|||||||
type state = {
|
type state = {
|
||||||
genesis: Block_hash.t ;
|
genesis: Block_hash.t ;
|
||||||
index : Context.index ;
|
index : Context.index ;
|
||||||
|
|
||||||
|
(* Only mutated once for caching/lazy initialisation *)
|
||||||
mutable delegates: public_key_hash list ;
|
mutable delegates: public_key_hash list ;
|
||||||
constants : Constants.t ;
|
mutable constants : Constants.t option ;
|
||||||
|
|
||||||
|
(* truly mutable *)
|
||||||
mutable best: Client_baking_blocks.block_info ;
|
mutable best: Client_baking_blocks.block_info ;
|
||||||
mutable future_slots:
|
mutable future_slots:
|
||||||
(Time.t * (Client_baking_blocks.block_info * int * public_key_hash)) list ;
|
(Time.t * (Client_baking_blocks.block_info * int * public_key_hash)) list ;
|
||||||
@ -500,6 +504,14 @@ let get_delegates cctxt state =
|
|||||||
return delegates
|
return delegates
|
||||||
| _ :: _ as delegates -> return delegates
|
| _ :: _ as delegates -> return delegates
|
||||||
|
|
||||||
|
let get_constants cctxt state =
|
||||||
|
match state.constants with
|
||||||
|
| None ->
|
||||||
|
Alpha_services.Constants.all cctxt (`Main, `Head 0) >>=? fun constants ->
|
||||||
|
state.constants <- Some constants;
|
||||||
|
return constants
|
||||||
|
| Some constants -> return constants
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let insert_block
|
let insert_block
|
||||||
@ -595,8 +607,9 @@ let filter_invalid_operations (cctxt : #full) state block_info (operations : pac
|
|||||||
| Ok () ->
|
| Ok () ->
|
||||||
let quota : Alpha_environment.Updater.quota list = Main.validation_passes in
|
let quota : Alpha_environment.Updater.quota list = Main.validation_passes in
|
||||||
(* This shouldn't happen *)
|
(* This shouldn't happen *)
|
||||||
|
get_constants cctxt state >>=? fun constants ->
|
||||||
let endorsements =
|
let endorsements =
|
||||||
List.sub (List.rev endorsements) state.constants.Constants.parametric.endorsers_per_block
|
List.sub (List.rev endorsements) constants.Constants.parametric.endorsers_per_block
|
||||||
in
|
in
|
||||||
let votes =
|
let votes =
|
||||||
retain_operations_up_to_quota (List.rev votes) (List.nth quota 1).max_size in
|
retain_operations_up_to_quota (List.rev votes) (List.nth quota 1).max_size in
|
||||||
@ -785,8 +798,7 @@ let create
|
|||||||
| Some t -> t in
|
| Some t -> t in
|
||||||
lwt_debug "Opening shell context" >>= fun () ->
|
lwt_debug "Opening shell context" >>= fun () ->
|
||||||
Client_baking_simulator.load_context ~context_path >>= fun index ->
|
Client_baking_simulator.load_context ~context_path >>= fun index ->
|
||||||
Alpha_services.Constants.all cctxt (`Main, `Head 0) >>=? fun constants ->
|
let state = create_state genesis_hash index delegates None bi in
|
||||||
let state = create_state genesis_hash index delegates constants bi in
|
|
||||||
check_error @@ insert_block cctxt ?max_priority state bi >>= fun () ->
|
check_error @@ insert_block cctxt ?max_priority state bi >>= fun () ->
|
||||||
|
|
||||||
(* main loop *)
|
(* main loop *)
|
||||||
|
Loading…
Reference in New Issue
Block a user