ligo/lib_client_base/client_node_rpcs.ml

169 lines
5.7 KiB
OCaml
Raw Normal View History

2016-09-08 21:13:10 +04:00
(**************************************************************************)
(* *)
2017-11-14 03:36:14 +04:00
(* Copyright (c) 2014 - 2017. *)
2016-09-08 21:13:10 +04:00
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
(* Tezos Command line interface - RPC Calls *)
open Client_rpcs
2016-09-08 21:13:10 +04:00
module Services = Node_rpc_services
2017-11-07 20:38:11 +04:00
let errors (rpc : #rpc_sig) =
call_service0 rpc Services.Error.service ()
2017-11-07 20:38:11 +04:00
let forge_block_header rpc header =
call_service0 rpc Services.forge_block_header header
let inject_block cctxt
?(async = false) ?(force = false) ?net_id
raw operations =
call_err_service0 cctxt Services.inject_block
{ raw ; blocking = not async ; force ; net_id ; operations }
let inject_operation cctxt ?(async = false) ?force ?net_id operation =
call_err_service0 cctxt Services.inject_operation
(operation, not async, net_id, force)
2017-03-30 15:08:33 +04:00
let inject_protocol cctxt ?(async = false) ?force protocol =
call_err_service0 cctxt Services.inject_protocol
(protocol, not async, force)
let bootstrapped cctxt =
call_streamed_service0 cctxt Services.bootstrapped ()
let complete cctxt ?block prefix =
2016-11-15 17:44:16 +04:00
match block with
| None ->
call_service1 cctxt Services.complete prefix ()
2016-11-15 17:44:16 +04:00
| Some block ->
call_service2 cctxt Services.Blocks.complete block prefix ()
let describe config ?(recurse = true) path =
2017-12-07 20:43:21 +04:00
let { RPC.Service.meth ; uri } =
RPC.Service.forge_request Node_rpc_services.describe
((), path) { RPC.Description.recurse } in
2017-12-07 20:43:21 +04:00
let path = String.split_path (Uri.path uri) in (* Temporary *)
2017-11-07 20:38:11 +04:00
config#get_json meth path (`O []) >>=? fun json ->
match Data_encoding.Json.destruct (RPC.Service.output_encoding Node_rpc_services.describe) json with
| exception msg ->
let msg =
Format.asprintf "%a" (fun x -> Data_encoding.Json.print_error x) msg in
failwith "Failed to parse Json answer: %s" msg
| v -> return v
2016-09-08 21:13:10 +04:00
module Blocks = struct
2016-09-08 21:13:10 +04:00
type block = Services.Blocks.block
type block_info = Services.Blocks.block_info = {
hash: Block_hash.t ;
net_id: Net_id.t ;
level: Int32.t ;
proto_level: int ; (* uint8 *)
2016-09-08 21:13:10 +04:00
predecessor: Block_hash.t ;
timestamp: Time.t ;
validation_passes: int ; (* uint8 *)
operations_hash: Operation_list_list_hash.t ;
fitness: MBytes.t list ;
data: MBytes.t ;
operations: (Operation_hash.t * Operation.t) list list option ;
protocol: Protocol_hash.t ;
test_network: Test_network_status.t;
2016-09-08 21:13:10 +04:00
}
type preapply_param = Services.Blocks.preapply_param = {
timestamp: Time.t ;
proto_header: MBytes.t ;
operations: Operation.t list ;
sort_operations: bool ;
2016-09-08 21:13:10 +04:00
}
type preapply_result = Services.Blocks.preapply_result = {
shell_header: Block_header.shell_header ;
operations: error Preapply_result.t ;
2016-09-08 21:13:10 +04:00
}
2017-04-20 10:26:43 +04:00
let net_id cctxt h =
call_service1 cctxt Services.Blocks.net_id h ()
let level cctxt h =
call_service1 cctxt Services.Blocks.level h ()
let predecessor cctxt h =
call_service1 cctxt Services.Blocks.predecessor h ()
let predecessors cctxt h l =
call_service1 cctxt Services.Blocks.predecessors h l
let hash cctxt h =
call_service1 cctxt Services.Blocks.hash h ()
let timestamp cctxt h =
call_service1 cctxt Services.Blocks.timestamp h ()
let fitness cctxt h =
call_service1 cctxt Services.Blocks.fitness h ()
let operations cctxt ?(contents = false) h =
call_service1 cctxt Services.Blocks.operations h
{ contents ; monitor = false }
let protocol cctxt h =
call_service1 cctxt Services.Blocks.protocol h ()
let test_network cctxt h =
call_service1 cctxt Services.Blocks.test_network h ()
let preapply cctxt h
?(timestamp = Time.now ()) ?(sort = false) ~proto_header operations =
call_err_service1
cctxt Services.Blocks.preapply h
{ timestamp ; proto_header ; sort_operations = sort ; operations }
let pending_operations cctxt block =
call_service1 cctxt Services.Blocks.pending_operations block ()
let info cctxt ?(include_ops = true) h =
call_service1 cctxt Services.Blocks.info h include_ops
let complete cctxt block prefix =
call_service2 cctxt Services.Blocks.complete block prefix ()
let list cctxt ?(include_ops = false)
?length ?heads ?delay ?min_date ?min_heads () =
call_service0 cctxt Services.Blocks.list
{ include_ops ; length ; heads ; monitor = Some false ; delay ;
2016-09-21 18:22:43 +04:00
min_date ; min_heads }
let monitor cctxt ?(include_ops = false)
?length ?heads ?delay ?min_date ?min_heads () =
call_streamed_service0 cctxt Services.Blocks.list
{ include_ops ; length ; heads ; monitor = Some true ; delay ;
2016-09-21 18:22:43 +04:00
min_date ; min_heads }
2016-09-08 21:13:10 +04:00
end
module Operations = struct
let monitor cctxt ?(contents = false) () =
call_streamed_service1 cctxt Services.Blocks.operations
`Prevalidation
{ contents ; monitor = true }
2016-09-08 21:13:10 +04:00
end
2016-10-25 21:00:03 +04:00
module Protocols = struct
2017-03-30 16:31:16 +04:00
let contents cctxt hash =
call_service1 cctxt Services.Protocols.contents hash ()
let list cctxt ?contents () =
call_service0
cctxt Services.Protocols.list
{ contents; monitor = Some false }
2016-10-25 21:00:03 +04:00
end
2017-03-02 18:39:36 +04:00
module Network = struct
2017-03-02 18:39:36 +04:00
let stat cctxt =
call_service0 cctxt Services.Network.stat ()
2017-03-02 18:39:36 +04:00
let connections cctxt =
call_service0 cctxt Services.Network.Connection.list ()
2017-03-02 18:39:36 +04:00
let peers cctxt =
call_service0 cctxt Services.Network.Peer_id.list []
2017-03-02 18:39:36 +04:00
let points cctxt =
call_service0 cctxt Services.Network.Point.list []
2017-03-02 18:39:36 +04:00
end