diff --git a/src/lib_shell/block_directory.ml b/src/lib_shell/block_directory.ml index f6a675caa7f730b0df0133d7ecd8cfd20475823b..2480842a9aa66a40ac58b32febbc52767e9d912d 100644 --- a/src/lib_shell/block_directory.ml +++ b/src/lib_shell/block_directory.ml @@ -172,6 +172,11 @@ let build_raw_rpc_directory_with_validator (module Proto : Block_services.PROTO) in let module Block_services = Block_services.Make (Proto) (Next_proto) in let module S = Block_services.S in + register0 S.live_blocks (fun (chain_store, block) () () -> + let* live_blocks, _ = + Store.Chain.compute_live_blocks chain_store ~block + in + return live_blocks) ; (* helpers *) register0 S.Helpers.Preapply.block (fun (chain_store, block) q p -> let timestamp = @@ -255,11 +260,6 @@ let build_raw_rpc_directory_without_validator in let module Block_services = Block_services.Make (Proto) (Next_proto) in let module S = Block_services.S in - register0 S.live_blocks (fun (chain_store, block) () () -> - let* live_blocks, _ = - Store.Chain.compute_live_blocks chain_store ~block - in - return live_blocks) ; (* block metadata *) let block_metadata chain_store block = let* metadata = Store.Block.get_block_metadata chain_store block in diff --git a/src/lib_shell/chain_directory.ml b/src/lib_shell/chain_directory.ml index 1f3e098952de753e39c284a4d1e169e41edb7642..8e173dd6cb7e1194bf626b91eb04f3f8d014326a 100644 --- a/src/lib_shell/chain_directory.ml +++ b/src/lib_shell/chain_directory.ml @@ -125,6 +125,13 @@ let register0 dir s f = let rpc_directory_with_validator dir validator = let open Lwt_result_syntax in + let register1 s f = + dir := + Tezos_rpc.Directory.register + !dir + (Tezos_rpc.Service.subst1 s) + (fun (chain, a) p q -> f chain a p q) + in register0 dir S.is_bootstrapped (fun chain_store () () -> match Validator.get validator (Store.Chain.chain_id chain_store) with | Error _ -> Lwt.fail Not_found @@ -137,17 +144,23 @@ let rpc_directory_with_validator dir validator = | Error _ -> Lwt.fail Not_found | Ok chain_validator -> let*! v = Chain_validator.force_bootstrapped chain_validator b in - return v) + return v) ; + (* invalid_blocks *) + register0 dir S.Invalid_blocks.list (fun chain_store () () -> + let convert (hash, {Store_types.level; errors}) = {hash; level; errors} in + let*! invalid_blocks_map = Store.Block.read_invalid_blocks chain_store in + let blocks = Block_hash.Map.bindings invalid_blocks_map in + return (List.map convert blocks)) ; + register1 S.Invalid_blocks.get (fun chain_store hash () () -> + let*! o = Store.Block.read_invalid_block_opt chain_store hash in + match o with + | None -> Lwt.fail Not_found + | Some {level; errors} -> return {hash; level; errors}) ; + register1 S.Invalid_blocks.delete (fun chain_store hash () () -> + Store.Block.unmark_invalid chain_store hash) let rpc_directory_without_validator dir = let open Lwt_result_syntax in - let register1 s f = - dir := - Tezos_rpc.Directory.register - !dir - (Tezos_rpc.Service.subst1 s) - (fun (chain, a) p q -> f chain a p q) - in register0 dir S.chain_id (fun chain_store () () -> return (Store.Chain.chain_id chain_store)) ; register0 dir S.checkpoint (fun chain_store () () -> @@ -169,20 +182,7 @@ let rpc_directory_without_validator dir = return v) ; (* blocks *) register0 dir S.Blocks.list (fun chain q () -> - list_blocks chain ?length:q#length ?min_date:q#min_date q#heads) ; - (* invalid_blocks *) - register0 dir S.Invalid_blocks.list (fun chain_store () () -> - let convert (hash, {Store_types.level; errors}) = {hash; level; errors} in - let*! invalid_blocks_map = Store.Block.read_invalid_blocks chain_store in - let blocks = Block_hash.Map.bindings invalid_blocks_map in - return (List.map convert blocks)) ; - register1 S.Invalid_blocks.get (fun chain_store hash () () -> - let*! o = Store.Block.read_invalid_block_opt chain_store hash in - match o with - | None -> Lwt.fail Not_found - | Some {level; errors} -> return {hash; level; errors}) ; - register1 S.Invalid_blocks.delete (fun chain_store hash () () -> - Store.Block.unmark_invalid chain_store hash) + list_blocks chain ?length:q#length ?min_date:q#min_date q#heads) let rpc_directory validator = let dir : Store.chain_store Tezos_rpc.Directory.t ref =