(**************************************************************************) (* *) (* Copyright (c) 2014 - 2018. *) (* Dynamic Ledger Solutions, Inc. *) (* *) (* All rights reserved. No warranty, explicit or implicit, provided. *) (* *) (**************************************************************************) open Logging.Client.Denunciation let create cctxt endorsement_stream = let last_get_endorsement = ref None in let get_endorsement () = match !last_get_endorsement with | None -> let t = Lwt_stream.get endorsement_stream in last_get_endorsement := Some t ; t | Some t -> t in let rec worker_loop () = (* let timeout = compute_timeout state in *) Lwt.choose [ (* (timeout >|= fun () -> `Timeout) ; *) (get_endorsement () >|= fun e -> `Endorsement e) ; ] >>= function | `Endorsement (None | Some (Error _)) -> Lwt.return_unit | `Endorsement (Some (Ok e)) -> last_get_endorsement := None ; Client_keys.Public_key_hash.name cctxt e.Client_baking_operations.source >>= function | Ok source -> lwt_debug "Discovered endorsement for block %a by %s (slot @[%a@])" Block_hash.pp_short e.block source Format.(pp_print_list pp_print_int) e.slots >>= fun () -> worker_loop () | Error _ -> (* TODO log *) worker_loop () in lwt_log_info "Starting denunciation daemon" >>= fun () -> worker_loop ()