Baker/Nonces: on new cycles, clear 5 cycles old nonces from the file
This commit is contained in:
parent
eda9d8c37f
commit
3b33fe1709
@ -934,19 +934,43 @@ let compute_best_slot_on_current_level
|
|||||||
|
|
||||||
module Nonces_map = Map.Make(Block_hash)
|
module Nonces_map = Map.Make(Block_hash)
|
||||||
|
|
||||||
|
(** [filter_outdated_nonces] removes nonces older than 5 cycles in the nonce file *)
|
||||||
|
let filter_outdated_nonces
|
||||||
|
(cctxt : #Proto_alpha.full)
|
||||||
|
?(chain = `Main)
|
||||||
|
head
|
||||||
|
nonces =
|
||||||
|
Alpha_block_services.metadata
|
||||||
|
cctxt ~chain ~block:head () >>=? fun { protocol_data = { level = current_level } } ->
|
||||||
|
let current_cycle = Cycle.to_int32 current_level.Level.cycle in
|
||||||
|
let is_older_than_5_cycles block_cycle =
|
||||||
|
let i = Int32.sub current_cycle block_cycle in
|
||||||
|
i > 5l
|
||||||
|
in
|
||||||
|
filter_map_s (fun (hash, _) ->
|
||||||
|
Alpha_block_services.metadata cctxt ~chain ~block:(`Hash (hash, 0)) () >>=?
|
||||||
|
fun { protocol_data = { level = { Level.cycle } } } ->
|
||||||
|
let i = Cycle.to_int32 cycle in
|
||||||
|
if is_older_than_5_cycles i then
|
||||||
|
return_some hash
|
||||||
|
else
|
||||||
|
return_none
|
||||||
|
) nonces >>=? fun outdated_nonces ->
|
||||||
|
Client_baking_nonces.dels cctxt outdated_nonces
|
||||||
|
|
||||||
(** [get_unrevealed_nonces] retrieve registered nonces *)
|
(** [get_unrevealed_nonces] retrieve registered nonces *)
|
||||||
let get_unrevealed_nonces
|
let get_unrevealed_nonces
|
||||||
(cctxt : #Proto_alpha.full) ?(force = false) ?(chain = `Main) block =
|
(cctxt : #Proto_alpha.full) ?(force = false) ?(chain = `Main) head =
|
||||||
cctxt#with_lock begin fun () ->
|
cctxt#with_lock begin fun () ->
|
||||||
Client_baking_nonces.load cctxt
|
Client_baking_nonces.load cctxt
|
||||||
end >>=? fun nonces ->
|
end >>=? fun nonces ->
|
||||||
let nonces = List.fold_left
|
let nonces_map = List.fold_left
|
||||||
(fun map (hash, nonce) -> Nonces_map.add hash nonce map)
|
(fun map (hash, nonce) -> Nonces_map.add hash nonce map)
|
||||||
Nonces_map.empty nonces in
|
Nonces_map.empty nonces in
|
||||||
Client_baking_blocks.blocks_from_current_cycle
|
Client_baking_blocks.blocks_from_current_cycle
|
||||||
cctxt block ~offset:(-1l) () >>=? fun blocks ->
|
cctxt head ~offset:(-1l) () >>=? fun blocks ->
|
||||||
filter_map_s (fun hash ->
|
filter_map_s (fun hash ->
|
||||||
match Nonces_map.find_opt hash nonces with
|
match Nonces_map.find_opt hash nonces_map with
|
||||||
| None -> return_none
|
| None -> return_none
|
||||||
| Some nonce ->
|
| Some nonce ->
|
||||||
Alpha_block_services.metadata
|
Alpha_block_services.metadata
|
||||||
@ -955,7 +979,7 @@ let get_unrevealed_nonces
|
|||||||
return_some (hash, (level.level, nonce))
|
return_some (hash, (level.level, nonce))
|
||||||
else
|
else
|
||||||
Alpha_services.Nonce.get
|
Alpha_services.Nonce.get
|
||||||
cctxt (chain, block) level.level >>=? function
|
cctxt (chain, head) level.level >>=? function
|
||||||
| Missing nonce_hash
|
| Missing nonce_hash
|
||||||
when Nonce.check_hash nonce nonce_hash ->
|
when Nonce.check_hash nonce nonce_hash ->
|
||||||
lwt_log_notice Tag.DSL.(fun f ->
|
lwt_log_notice Tag.DSL.(fun f ->
|
||||||
@ -973,14 +997,22 @@ let get_unrevealed_nonces
|
|||||||
>>= fun () -> return_none
|
>>= fun () -> return_none
|
||||||
| Forgotten -> return_none
|
| Forgotten -> return_none
|
||||||
| Revealed _ -> return_none)
|
| Revealed _ -> return_none)
|
||||||
blocks
|
blocks >>=? function
|
||||||
|
| [] -> return_nil
|
||||||
|
| x ->
|
||||||
|
(* If some nonces are to be revealed it means :
|
||||||
|
- We entered a new cycle and we can clear old nonces ;
|
||||||
|
- A revelation was not included yet in the cycle beggining.
|
||||||
|
So, it is safe to only filter outdated_nonces there *)
|
||||||
|
filter_outdated_nonces cctxt ~chain head nonces >>=? fun () ->
|
||||||
|
return x
|
||||||
|
|
||||||
(** [reveal_potential_nonces] reveal registered nonces *)
|
(** [reveal_potential_nonces] reveal registered nonces *)
|
||||||
let reveal_potential_nonces cctxt block =
|
let reveal_potential_nonces cctxt new_head =
|
||||||
get_unrevealed_nonces cctxt block >>= function
|
get_unrevealed_nonces cctxt new_head >>= function
|
||||||
| Ok nonces ->
|
| Ok nonces ->
|
||||||
Client_baking_revelation.forge_seed_nonce_revelation
|
Client_baking_revelation.forge_seed_nonce_revelation
|
||||||
cctxt block (List.map snd nonces)
|
cctxt new_head (List.map snd nonces)
|
||||||
| Error err ->
|
| Error err ->
|
||||||
lwt_warn Tag.DSL.(fun f ->
|
lwt_warn Tag.DSL.(fun f ->
|
||||||
f "Cannot read nonces: %a"
|
f "Cannot read nonces: %a"
|
||||||
|
Loading…
Reference in New Issue
Block a user